Как Исключить Свойства при Сериализации в JSON. Начало
Распространённая проблема при сериализации объектов в JSON в том, что результат содержит множество нежелательных свойств. По умолчанию сериализуются все свойства. Однако очень часто нам не нужна вся информация. Рассмотрим, как убрать ненужные свойства при сериализации объекта на примере двух популярных библиотек сериализации System.Text.Json и Newtonsoft.Json.
1. Игнорируем отдельные свойства
Для отдельных свойств можно использовать атрибут
[JsonIgnore], чтобы исключить его из вывода при сериализации объекта. Атрибут доступен в пространстве имен System.Text.Json.Serialization или Newtonsoft.Json соответственно:public class PersonВывод:
{
[JsonIgnore]
public int Id { get; set; }
public string? Name { get; set; }
public string? LastName { get; set; }
}
var person = new Person()
{
Id = 1,
Name = "John",
LastName = "Smith"
};
var json1 = JsonSerializer.Serialize(person);
var json2 = JsonConvert.SerializeObject(person);
{
"Name": "John",
"LastName": "Smith"
}
2. Условное игнорирование отдельных свойствМы также можем применять условия при индивидуальном игнорировании свойства. Для атрибута
[JsonIgnore] можно установить свойство Condition . Например, [JsonIgnore(Condition = JsonIgnoreCondition.Never)]Доступные значения:
public int Id { get; set; }
- Always — свойство всегда игнорируется (по умолчанию),
- Never — свойство всегда сериализуется и десериализуется, независимо от глобальных параметров DefaultIgnoreCondition, IgnoreReadOnlyProperties и IgnoreReadOnlyFields,
- WhenWritingDefault — свойство не учитывается при сериализации, если содержит значение по умолчанию для типа (default),
- WhenWritingNull — свойство не учитывается при сериализации, если оно равно null.
В Newtonsoft.Json сериализацию свойства можно настроить с помощью JsonPropertyAttribute.
3. Атрибуты DataContract и DataMember
В некоторых сценариях у нас есть классы со многими свойствами, а мы хотим сериализовать только некоторые из них. При использовании Newtonsoft.Json мы можем добавить атрибут класса
[DataContract], а для свойств, которые должны оставаться при сериализации - атрибут [DataMember]. Оба доступны в пространстве имен System.Runtime.Serialization. public class CustomerВывод:
{
public int Id { get; set; }
[DataMember]
public string? Name { get; set; }
[DataMember]
public string? LastName { get; set; }
}
var customer = new Customer()
{
Id = 1,
Name = "John",
LastName = "Smith"
};
var json = JsonConvert.SerializeObject(customer);
{
"Name": "John",
"LastName": "Smith"
}
Окончание следует…Источник: https://code-maze.com/csharp-exclude-properties-from-json-serialization/