2012-03-22 102 views
54

我有一些數據需要序列化爲JSON。我正在使用JSON.NET。我的代碼結構與此類似:忽略Json.net中的空字段

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

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

問題是,我的JSON輸出只需要具有Field1Field2Field3 - 這取決於其使用領域(即不爲空)。 默認情況下,我的JSON是這樣的:

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

我知道我可以使用NullValueHandling.Ignore,但是這給了我JSON看起來像這樣:

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

而我需要的是這樣的:

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

有沒有簡單的方法來實現這一目標?

+0

可能的重複[如何忽略類中的屬性如果null,使用json.net](http://stackoverflow.com/questions/6507889/how-to-ignore-a-property-in-class-if -null-using-json-net) – 2016-08-12 08:20:09

回答

58

是的,你需要使用JsonSerializerSettings.NullValueHandling = NullValueHandling.Ignore

但是,因爲你需要標記字段2,字段3 可空得到預期的結果structs are value types

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

或者只是使用的,而不是結構類。

文檔:NullValueHandling Enumeration

+1

欲瞭解更多信息,請參閱http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size。 ASPX – 2012-05-09 08:58:29

54

您還可以將JsonProperty屬性相關的屬性和設置的空值處理的方式。請參閱下面示例中的Reference屬性:

注意:JsonSerializerSettings將覆蓋這些屬性。

public class Person 
{ 
    public int Id { get; set; } 

    [JsonProperty(NullValueHandling = NullValueHandling.Ignore)] 
    public int? Reference { get; set; } 

    public string Name { get; set; } 
} 

Hth。