Игнорирование нулевых полей в Json.net

У меня есть некоторые данные, которые я должен сериализовать в JSON. Я использую JSON.NET. Моя структура кода похожа на это:

public struct structA { public string Field1; public structB Field2; public structB Field3; } public struct structB { public string Subfield1; public string Subfield2; } 

Проблема в том, что для моего вывода JSON должно быть ТОЛЬКО Field1 или Field1 ИЛИ Field3 – это зависит от того, какое поле используется (т. Field3 ). По умолчанию мой JSON выглядит так:

 { "Field1": null, "Field2": {"Subfield1": "test1", "Subfield2": "test2"}, "Field3": {"Subfield1": null, "Subfield2": null}, } 

Я знаю, что могу использовать NullValueHandling.Ignore , но это дает мне JSON, который выглядит так:

 { "Field2": {"Subfield1": "test1", "Subfield2": "test2"}, "Field3": {} } 

И мне это нужно:

 { "Field2": {"Subfield1": "test1", "Subfield2": "test2"}, } 

Есть ли простой способ достичь этого?

Да, вам нужно использовать JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore .

Но поскольку структуры – это типы значений, вам нужно отметить Field2, Field3 – nullable, чтобы получить ожидаемый результат:

 public struct structA { public string Field1; public structB? Field2; public structB? Field3; } 

Или просто используйте classы вместо structs.

Документация: NullValueHandling Enumeration

Вы также можете применить атрибут JsonProperty к соответствующим свойствам и таким образом настроить обработку нулевого значения. См. Свойство Reference в приведенном ниже примере:

Примечание. Параметры JsonSerializerSettings переопределяют атрибуты.

 public class Person { public int Id { get; set; } [JsonProperty( NullValueHandling = NullValueHandling.Ignore )] public int? Reference { get; set; } public string Name { get; set; } } 

Hth.

  • Задача не сериализуема: java.io.NotSerializableException при вызове функции закрытие только для classов не объектов
  • Автоматическая десериализация свойств C #
  • Может ли JavaScriptSerializer исключать свойства с нулевыми значениями / значениями по умолчанию?
  • jQuery serializeArray не включает кнопку отправки, которая была нажата
  • Deserialize специфическое перечисление в system.enum в Json.Net
  • C # JSON.NET - десериализация ответа, использующего необычную структуру данных
  • Каковы различия между XmlSerializer и BinaryFormatter
  • JSON.Net Обнаружен собственный цикл привязки
  • Как настроить сериализацию списка объектов JAXB для JSON?
  • Сериализация типа Json.Net с полиморфным дочерним объектом
  • Существуют ли эквиваленты C ++ для функций протокола ввода-вывода протокола Buffer в Java?
  • Давайте будем гением компьютера.