Десериализация через System.Text.Json в регистронечувствительный HashSet
В общем, есть вот такой класс:
public class DictionarySettings
{
public string TableName { get; set; }
public string ConnectionString { get; set; }
public string IdColumnName { get; set; }
public HashSet<string> Columns { get;} = new(StringComparer.OrdinalIgnoreCase);
}
Я бы хотел бы, чтобы десериализатор считанные данные занес в уже созданную коллекцию или у меня была возможность сказать ему, что она должна быть создана без зависимости от регистра.
Я как-нибудь могу это сделать?
Знаю, что есть всякие конверторы типов, но как я понял, то я там должен ручками буду описать сериализацию каждого поля и мне не будет достаточно описать только один конкретный, что может быть проблематично, если у меня будет сложный объект, где нужно обработать по особенному только 1 поле.
Ответы (1 шт):
Как насчёт такого варианта. Делаем дополнительный класс
class DictionarySettingsDto
{
public string TableName { get; set; }
public string ConnectionString { get; set; }
public string IdColumnName { get; set; }
public HashSet<string> Columns { get; set; }
}
Десериализуем json в него, а далее просто маппим его на нужный класс с желаемым компаратором.
var dsDto = JsonSerializer.Deserialize<DictionarySettingsDto>(json);
var ds = new DictionarySettings();
ds.TableName = dsDto.TableName;
ds.ConnectionString = dsDto.ConnectionString;
ds.IdColumnName = dsDto.IdColumnName;
foreach (var x in dsDto.Columns)
ds.Columns.Add(x);
// Далее используем ds.
При желании можно прикрутить какой-нибудь маппер.
Но и ручной маппинг, имхо, всяко проще чем написание конвертера.