Ignoring null fields in Json.net
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?
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
You can also apply the JsonProperty attribute to the relevant properties and set the null value handling that way. Refer to the Reference
property in the example below:
Note: The JsonSerializerSettings
will override the attributes.
public class Person
{
public int Id { get; set; }
[JsonProperty( NullValueHandling = NullValueHandling.Ignore )]
public int? Reference { get; set; }
public string Name { get; set; }
}