Игнорирование нулевых полей в 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.

  • Как добавить тип в белый список политики сериализации GWT?
  • Как десериализовать JSON с двойными именами свойств в одном и том же объекте
  • Как вы сериализуете объект на C ++?
  • Использование jQuery для захвата содержимого из iframe CKEditor
  • Сериализация нулевого значения в JSON.NET
  • Исключение «Исключительная привязка к реляционной ссылке» с JSON.Net
  • Json.net сериализует определенное частное поле
  • Существуют ли эквиваленты C ++ для функций протокола ввода-вывода протокола Buffer в Java?
  • Удаление десериализации JSON в объект с помощью Json.NET
  • JSON.Net выдает StackOverflowException при использовании
  • Может ли JavaScriptSerializer исключать свойства с нулевыми значениями / значениями по умолчанию?
  • Давайте будем гением компьютера.