Как Исключить Свойства при Сериализации в JSON. Окончание
Начало
4. Игнорировать все свойства с null или default
Можно не учитывать при сериализации свойства со значениями null или значениями по умолчанию для типа (default).
public class BookВ System.Text.Json для этого нужно задать опцию DefaultIgnoreCondition со значением WhenWritingNull или WhenWritingDefault соответственно:
{
public int Id { get; set; }
public string? Title { get; set; }
public int? Pages { get; set; }
public int Sells { get; set; }
public Author? Author { get; set; }
}
var book = new Book()
{
Id = 1,
Title = "Dracula"
};
var json1 = JsonSerializer.Serialize(book,В Newtonsoft.Json нужно задать параметры NullValueHandling или DefaultValueHandling соответственно:
new JsonSerializerOptions
{
DefaultIgnoreCondition
= JsonIgnoreCondition.WhenWritingNull
// или JsonIgnoreCondition.WhenWritingDefault
});
var json2 = JsonConvert.SerializeObject(book,Вывод:
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore
// или
// DefaultValueHandling =
// DefaultValueHandling.Ignore
});
{
"Id": 1,
"Title": "Dracula",
"Sells": 0
}
Если мы зададим игнорирование значений по умолчанию, то свойства "Sells" не будет в выводе.5. Используем IContractResolver
Newtonsoft.Json предоставляет этот интерфейс для тонкой настройки сериализации. Проще всего создать класс, унаследованный от DefaultContractResolver, в котором либо:
- переопределить метод CreateProperty, который позволяет обратиться к метаданным свойства и задать ему булево значение ShouldSerialize, определяющее, должно ли свойство попасть в вывод при сериализации,
- переопределить метод CreateProperties, который должен вернуть список свойств, попадающих в вывод при сериализации.
После создания класса, реализующего этот интерфейс, его можно подключить в настройках сериализации:
var json = JsonConvert.SerializeObject(book,Пример создания класса ContractResolver можно найти здесь.
new JsonSerializerSettings
{
ContractResolver =
new MyPropertiesResolver()
});
Источник: https://code-maze.com/csharp-exclude-properties-from-json-serialization/