Игнорирование отсутствующих свойств в сериализации JSON с использованием Newtonsoft.Json в C#

Сериализация JSON — распространенная задача при разработке на C#, позволяющая преобразовывать объекты в строки JSON и наоборот. Однако при десериализации JSON нередко можно встретить отсутствующие свойства, которых нет в полезных данных JSON. В таких случаях мы можем игнорировать эти недостающие свойства в процессе десериализации. В этой статье блога мы рассмотрим различные методы достижения этой цели с помощью библиотеки Newtonsoft.Json, популярной платформы JSON на C#.

Метод 1. Использование атрибута [JsonIgnore]
Один простой способ игнорировать отсутствующие свойства во время десериализации — использовать атрибут [JsonIgnore]. Применяя этот атрибут к свойству, Newtonsoft.Json просто пропустит отсутствующее свойство, если оно не найдено в полезных данных JSON. Вот пример:

public class MyClass
{
    public string Name { get; set; }

    [JsonIgnore]
    public int Age { get; set; }
}
string json = "{\"Name\":\"John\"}";
MyClass obj = JsonConvert.DeserializeObject<MyClass>(json);
Console.WriteLine(obj.Name);  // Output: John
Console.WriteLine(obj.Age);   // Output: 0 (default value, as it was ignored)

Метод 2: использование свойства MissingMemberHandling
Другой способ игнорировать отсутствующие свойства — установить свойство MissingMemberHandlingобъекта JsonSerializerSettings. Это свойство позволяет указать, как следует обрабатывать отсутствующие элементы во время десериализации. Если установить для него значение MissingMemberHandling.Ignore, Newtonsoft.Json пропустит отсутствующие свойства. Вот пример:

string json = "{\"Name\":\"John\"}";
JsonSerializerSettings settings = new JsonSerializerSettings
{
    MissingMemberHandling = MissingMemberHandling.Ignore
};
MyClass obj = JsonConvert.DeserializeObject<MyClass>(json, settings);
Console.WriteLine(obj.Name);  // Output: John
Console.WriteLine(obj.Age);   // Output: 0 (default value, as it was ignored)

Метод 3: использование свойства DefaultValueHandling
Свойство DefaultValueHandlingJsonSerializerSettingsтакже можно использовать для игнорирования отсутствующих свойств во время десериализации. Установив для него значение DefaultValueHandling.Ignore, Newtonsoft.Json присвоит значение по умолчанию отсутствующему свойству, фактически игнорируя его. Вот пример:

string json = "{\"Name\":\"John\"}";
JsonSerializerSettings settings = new JsonSerializerSettings
{
    DefaultValueHandling = DefaultValueHandling.Ignore
};
MyClass obj = JsonConvert.DeserializeObject<MyClass>(json, settings);
Console.WriteLine(obj.Name);  // Output: John
Console.WriteLine(obj.Age);   // Output: 0 (default value, as it was ignored)

В этой статье мы рассмотрели три метода игнорирования отсутствующих свойств во время десериализации JSON с использованием библиотеки Newtonsoft.Json на C#. Используя атрибут [JsonIgnore], MissingMemberHandlingили DefaultValueHandling, мы можем обрабатывать полезные данные JSON, которые могут не содержать все свойства, ожидаемые нашим C#. занятия. Эти методы обеспечивают гибкость и контроль над процессом десериализации, позволяя нам обрабатывать недостающие свойства в соответствии с нашими конкретными требованиями.