Игнорирование нулевых полей в 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, который выглядит так:
- Как превратить объект C # в строку JSON в .NET?
- Как десериализовать JSON с двойными именами свойств в одном и том же объекте
- Как изменить имена свойств при сериализации с помощью Json.net?
- Сериализация / десериализация пользовательской коллекции с дополнительными свойствами с помощью Json.Net
- Получение ServiceStack для сохранения информации о типе
{ "Field2": {"Subfield1": "test1", "Subfield2": "test2"}, "Field3": {} }
И мне это нужно:
{ "Field2": {"Subfield1": "test1", "Subfield2": "test2"}, }
Есть ли простой способ достичь этого?
- Когда и почему сущности JPA должны реализовывать интерфейс Serializable?
- Избегайте сериализации jacksonа на непривлекательных ленивых объектах
- Служба WCF Максимальная квота длины массива (16384) превышена
- Исключить свойство из сериализации через пользовательский атрибут (json.net)
- Использование readObject / writeObject в сериализации
- Как десериализовать объект JObject для .NET
- Java: объект для байта и байт для конвертера объектов (для Tokyo Cabinet)
- Почему java.util.Optional не является Serializable, как сериализовать объект с такими полями
Да, вам нужно использовать 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.