如何使用json.net忽略類中的屬性null

我正在使用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; }
}

我想僅當Test2Listnull時才向Test2List屬性添加JsonIgnore()屬性。 若是它不爲null,那麼我想將它包含在個人json中。 url


#1樓

使用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


#2樓

能夠在他們網站上的這個連接中看到(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
// }

#3樓

與@sirthomas的答案相似,JSON.NET也尊重DataMemberAttributeEmitDefaultValue屬性ci

[DataMember(Name="property_name", EmitDefaultValue=false)]

若是您已在模型類型中使用[DataContract][DataMember]而且不想添加特定於JSON.NET的屬性,則可能須要這樣作。 文檔


#4樓

您能夠這樣作來忽略您正在序列化的對象中的全部空值,而後任何空屬性都不會出如今JSON中 get

JsonSerializerSettings settings = new JsonSerializerSettings();
settings.NullValueHandling = NullValueHandling.Ignore;
var myJson = JsonConvert.SerializeObject(myObject, settings);

#5樓

適應@Mychief的/ @ amit的答案,但適用於使用VB的人

Dim JSONOut As String = JsonConvert.SerializeObject(
           myContainerObject, 
           New JsonSerializerSettings With {
                 .NullValueHandling = NullValueHandling.Ignore
               }
  )

請參閱: 「對象初始值設定項:命名和匿名類型(Visual Basic)」

https://msdn.microsoft.com/en-us/library/bb385125.aspx

相關文章
相關標籤/搜索