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

  • Добавление к ObjectOutputStream
  • Служба WCF Максимальная квота длины массива (16384) превышена
  • Сохранение / загрузка данных в Unity
  • Использование readObject / writeObject в сериализации
  • Как добавить тип в белый список политики сериализации GWT?
  • Уничтожить stream массива json по одному элементу за раз
  • ShouldSerialize * () vs * Условный шаблон условной сериализации
  • В чем разница между привязкой лямбды и метода на уровне выполнения?
  • C # JSON.NET - десериализация ответа, использующего необычную структуру данных
  • Преобразование любого объекта в массив байтов в java
  • Deserialize JSON в динамический объект C #?
  • Давайте будем гением компьютера.