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