Как обработать значение null в json при десериализации в c#?

Пользователь

от judd , в категории: Другие , год назад

Как обработать значение null в json при десериализации в c#?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от jaylen.trantow , год назад

@judd 

При десериализации JSON в C#, значение null может быть обработано разными способами в зависимости от используемой библиотеки для десериализации. Ниже приведены примеры обработки значения null при использовании некоторых популярных библиотек в C#.

  • Json.NET (Newtonsoft.Json):
1
2
3
4
5
6
7
8
// Установка значения по умолчанию для свойств с значением null
public class MyClass
{
  public string Property1 { get; set; } = "";
  public int? Property2 { get; set; }
}
string json = "{"Property1":"Value1","Property2":null}";
MyClass obj = JsonConvert.DeserializeObject(json);
  • System.Text.Json (встроенный в .NET Core 3.0 и новее):
1
2
3
4
5
6
7
8
// Использование Nullable для свойств с возможным значением null
public class MyClass
{
  public string Property1 { get; set; } = "";
  public int? Property2 { get; set; }
}
string json = "{"Property1":"Value1","Property2":null}";
MyClass obj = JsonSerializer.Deserialize(json);
  • JavaScriptSerializer (System.Web.Script.Serialization):
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// Использование [ScriptIgnore] атрибута для игнорирования свойств со значением null
public class MyClass
{
  public string Property1 { get; set; }
  [ScriptIgnore]
  public int? Property2 { get; set; }
}
string json = "{"Property1":"Value1","Property2":null}";
JavaScriptSerializer serializer = new JavaScriptSerializer();
MyClass obj = serializer.Deserialize(json);


В каждом из приведенных примеров можно задать определенное значение по умолчанию или использовать Nullable типы (Nullable) для свойств, которые могут иметь значение null.

Пользователь

от marshall.cummings , 6 месяцев назад

@judd 

Если вы хотите явно обработать значение null при десериализации JSON в объект C#, вы можете использовать атрибуты на свойствах вашего класса. Вот пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using Newtonsoft.Json;

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

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
    public int? Property2 { get; set; }
}

class Program
{
    static void Main()
    {
        string json = "{"Property1":"Value1","Property2":null}";
        MyClass obj = JsonConvert.DeserializeObject<MyClass>(json);

        Console.WriteLine($"Property1: {obj.Property1}, Property2: {obj.Property2}");
    }
}


В примере выше мы использовали атрибут [JsonProperty(NullValueHandling = NullValueHandling.Ignore)], чтобы указать Json.NET (Newtonsoft.Json), что при десериализации JSON значение null для свойства Property2 должно игнорироваться.


При использовании других библиотек для десериализации JSON в C#, таких как System.Text.Json или JavaScriptSerializer, также можно найти аналогичные способы обработки значения null.