Ignoring null fields in Json.net

Thaven picture Thaven · Mar 22, 2012 · Viewed 57.4k times · Source

I have some data that I have to serialize to JSON. I'm using JSON.NET. My code structure is similar to this:

public struct structA
{
    public string Field1;
    public structB Field2;
    public structB Field3;
}

public struct structB
{
    public string Subfield1;
    public string Subfield2;
}

Problem is, my JSON output needs to have ONLY Field1 OR Field2 OR Field3 - it depends on which field is used (i.e. not null). By default, my JSON looks like this:

{
    "Field1": null,
    "Field2": {"Subfield1": "test1", "Subfield2": "test2"},
    "Field3": {"Subfield1": null, "Subfield2": null},
}

I know I can use NullValueHandling.Ignore, but that gives me JSON that looks like this:

{
    "Field2": {"Subfield1": "test1", "Subfield2": "test2"},
    "Field3": {}
}

And what I need is this:

{
    "Field2": {"Subfield1": "test1", "Subfield2": "test2"},
}

Is there simple way to achieve this?

Answer

nemesv picture nemesv · Mar 22, 2012

Yes you need to use JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore.

But because structs are value types you need to mark Field2, Field3 nullable to get the expected result:

public struct structA
{
    public string Field1;
    public structB? Field2;
    public structB? Field3;
}

Or just use classes instead of structs.

Documentation: NullValueHandling Enumeration