Игнорирование пустых полей в 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
или Field2
или Field3
- это зависит от того, какое поле используется (т. е. не null).
По умолчанию мой 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"},
}
Is есть простой способ добиться этого?
2 ответа:
да, вам нужно использовать
JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore
.а потому что структуры-это типы значений вам нужно отметить Field2, Field3 nullable чтобы получить ожидаемый результат:
public struct structA { public string Field1; public structB? Field2; public structB? Field3; }
или просто использовать классы вместо структур.
документы: NullValueHandling Перечисления
вы также можете применить атрибут 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; } }
НТН.