我正在使用Json.NET將類序列化爲JSON。 json
我有這樣的課: 網站
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; } }
我想僅當Test2List
爲null
時才向Test2List
屬性添加JsonIgnore()
屬性。 若是它不爲null,那麼我想將它包含在個人json中。 url
使用JsonProperty
屬性的替代解決方案: spa
[JsonProperty(NullValueHandling=NullValueHandling.Ignore)] // or [JsonProperty("property_name", NullValueHandling=NullValueHandling.Ignore)] // or for all properties in a class [JsonObject(ItemNullValueHandling = NullValueHandling.Ignore)]
正如在線文檔中所見。 code
能夠在他們網站上的這個連接中看到(http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size.aspx)我支持使用[Default()]指定默認值 orm
取自連接 對象
public class Invoice { public string Company { get; set; } public decimal Amount { get; set; } // false is default value of bool public bool Paid { get; set; } // null is default value of nullable public DateTime? PaidDate { get; set; } // customize default values [DefaultValue(30)] public int FollowUpDays { get; set; } [DefaultValue("")] public string FollowUpEmailAddress { get; set; } } Invoice invoice = new Invoice { Company = "Acme Ltd.", Amount = 50.0m, Paid = false, FollowUpDays = 30, FollowUpEmailAddress = string.Empty, PaidDate = null }; string included = JsonConvert.SerializeObject(invoice, Formatting.Indented, new JsonSerializerSettings { }); // { // "Company": "Acme Ltd.", // "Amount": 50.0, // "Paid": false, // "PaidDate": null, // "FollowUpDays": 30, // "FollowUpEmailAddress": "" // } string ignored = JsonConvert.SerializeObject(invoice, Formatting.Indented, new JsonSerializerSettings { DefaultValueHandling = DefaultValueHandling.Ignore }); // { // "Company": "Acme Ltd.", // "Amount": 50.0 // }
與@sirthomas的答案相似,JSON.NET也尊重DataMemberAttribute
上的EmitDefaultValue
屬性 : ci
[DataMember(Name="property_name", EmitDefaultValue=false)]
若是您已在模型類型中使用[DataContract]
和[DataMember]
而且不想添加特定於JSON.NET的屬性,則可能須要這樣作。 文檔
您能夠這樣作來忽略您正在序列化的對象中的全部空值,而後任何空屬性都不會出如今JSON中 get
JsonSerializerSettings settings = new JsonSerializerSettings(); settings.NullValueHandling = NullValueHandling.Ignore; var myJson = JsonConvert.SerializeObject(myObject, settings);
適應@Mychief的/ @ amit的答案,但適用於使用VB的人
Dim JSONOut As String = JsonConvert.SerializeObject( myContainerObject, New JsonSerializerSettings With { .NullValueHandling = NullValueHandling.Ignore } )