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

  • Исключение «Исключительная привязка к реляционной ссылке» с JSON.Net
  • Как сериализовать Java-примитивы с помощью Jersey REST
  • Сериализация с Qt
  • Как сериализовать lambda?
  • Java: объект для байта и байт для конвертера объектов (для Tokyo Cabinet)
  • Преобразование записей в последовательную форму данных для отправки по HTTP
  • Сериализация classа, который содержит std :: string
  • Сериализовать статический class?
  • Обнаружено, что
  • Сериализация типа Json.Net с полиморфным дочерним объектом
  • Серийный цикл ActiveRecord с использованием JSON вместо YAML
  • Interesting Posts

    Навигационные режимы панели действий устарели в Android L

    Как исправить Windows 10 explorer.exe не отвечает?

    java.io.StreamCorruptedException: недопустимый код типа: 00

    Не удается подключиться к локальному серверу с других устройств (подключенных через Wi-Fi), когда сервер подключен через Wi-Fi

    Как мне установить переменную PATH на моем Mac, чтобы найдены инструменты, установленные в Hombrew?

    как получить MAC-адрес клиента, который просматривает веб-сайт asp.net mvc c #

    Несколько соединений с базой данных и Yii 2.0

    Создание и запуск проекта MVC 5 в VS 2012

    Использование Graphics2D для наложения текста на BufferedImage и возврата BufferedImage

    Почему мой преобразуемый атрибут Core Data не использует мой собственный NSValueTransformer?

    Как переименовать сеанс в tmux?

    Любой рекомендуемый учебник по профилированию Java?

    использование ярлыков в java без “петель”

    Реализация пользовательского выбора темы

    Клиент удаленного рабочего стола в Windows 7 Full Screen Issue

    Давайте будем гением компьютера.