Сериализация 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
Свойство DefaultValueHandling
JsonSerializerSettings
также можно использовать для игнорирования отсутствующих свойств во время десериализации. Установив для него значение 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#. занятия. Эти методы обеспечивают гибкость и контроль над процессом десериализации, позволяя нам обрабатывать недостающие свойства в соответствии с нашими конкретными требованиями.