У меня есть запись с несколькими свойствами bool, некоторые из них имеют значение по умолчанию true, а некоторые false:
Код: Выделить всё
private record MyRecord()
{
public bool BoolProperty1 { get; init; } // default false
public bool BoolProperty2 { get; init; } // default false
[DefaultValue(true)] public bool BoolProperty3 { get; init; } = true;
[DefaultValue(true)] public bool BoolProperty4 { get; init; } = true;
}
Вот демонстрация желательного поведения:
Код: Выделить всё
JsonSerializerOptions options = new();
options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingDefault;
MyRecord obj = new();
Console.WriteLine($"Object: {obj}"); // OK
string json = JsonSerializer.Serialize(obj, options);
Console.WriteLine($"JSON: {json}"); // Not OK
Код: Выделить всё
Object: MyRecord { BoolProperty1 = False, BoolProperty2 = False, BoolProperty3 = True, BoolProperty4 = True }
JSON: {"BoolProperty3":true,"BoolProperty4":true}
Код: Выделить всё
Object: MyRecord { BoolProperty1 = False, BoolProperty2 = False, BoolProperty3 = True, BoolProperty4 = True }
JSON: {}
На мой первоначальный вопрос я получил отличный ответ от Гуру Строна, в котором показано, как обрабатывать сериализацию всех свойств bool моего типа с помощью API JsonPropertyInfo.ShouldSerialize. В этом ответе я ищу что-то более обобщенное и продвинутое: как добиться желаемой сериализации JSON с помощью атрибута [DefaultValue(true)]. Возможно ли это?
Подробнее здесь: https://stackoverflow.com/questions/798 ... rties-in-j
Мобильная версия