How to ignore a property in class if null, using json.net
I am using Json.NET to serialize a class to JSON.
I have the class like this:
class Test1
{
[JsonProperty("id")]
public string ID { get; set; }
[JsonProperty("label")]
public string Label { get; set; }
[JsonProperty("url")]
public string URL { get; set; }
[JsonProperty("item")]
public List<Test2> Test2List { get; set; }
}
I want to add a JsonIgnore()
attribute to Test2List
property only when Test2List
is null
. If it is not null then I want to include it in my json.
As per James Newton King: If you create the serializer yourself rather than using JavaScriptConvert there is a NullValueHandling
property which you can set to ignore.
Here's a sample:
JsonSerializer _jsonWriter = new JsonSerializer {
NullValueHandling = NullValueHandling.Ignore
};
Alternatively, as suggested by @amit
JsonConvert.SerializeObject(myObject,
Newtonsoft.Json.Formatting.None,
new JsonSerializerSettings {
NullValueHandling = NullValueHandling.Ignore
});
An alternate solution using the JsonProperty
attribute:
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)]
//or
[JsonProperty("property_name", NullValueHandling=NullValueHandling.Ignore)]
As seen in this online doc.
Similar to @sirthomas's answer, JSON.NET also respects the EmitDefaultValue
property on DataMemberAttribute
:
[DataMember(Name="property_name", EmitDefaultValue=false)]
This may be desirable if you are already using [DataContract]
and [DataMember]
in your model type and don't want to add JSON.NET-specific attributes.
上一篇: 我如何使用C#解析JSON?