Подтвердить что ты не робот

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

Есть ли простой способ достичь этого?

4b9b3361

Ответ 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.