2016-02-08 50 views

回答

3

對於整個對象,在OptionsexcludeNulls參數是你想要的(許多不同的選項配置預calced,像Options.ExcludeNulls東西也適用)。

您可以使用Conditional Serialization控制單個屬性的序列化。 (我原來的回答中忘記了這個選項)。

例如

class ExampleClass 
{ 
    public string DontSerializeIfNull {get;set;} 
    public string AlwaysSerialize {get;set;} 

    public bool ShouldSerializeDontSerializeIfNull() 
    { 
     return DontSerializeIfNull != null; 
    } 
} 

JSON.Serialize(new ExampleClass { DontSerializeIfNull = null, AlwaysSerialize = null }); 
// {"AlwaysSerialize":null} 

JSON.Serialize(new ExampleClass { DontSerializeIfNull = "foo", AlwaysSerialize = null }); 
// {"AlwaysSerialize":null,"DontSerializeIfNull":"foo"} 

JSON.Serialize(new ExampleClass { DontSerializeIfNull = null, AlwaysSerialize = "bar" }); 
// {"AlwaysSerialize":"bar"} 

JSON.Serialize(new ExampleClass { DontSerializeIfNull = "foo", AlwaysSerialize = "bar" }); 
// {"AlwaysSerialize":"bar","DontSerializeIfNull":"foo"} 

吉爾只尊重上[DataMember]Name選項。我認爲兌現EmitDefaultValue不會是最難的事情,但沒有人爲此打開過issue

+0

Jil是否承認應該添加「ShouldSerialize」方法或somthing? –

+0

@guyAssaf .NET中的條件序列化是添加一個實例方法,爲屬性'XXX'返回名爲'ShouldSerializeXXX()'的'bool'。 Jil尊重這一點。 –

+0

@KevinMontrose:我該怎麼做,當我想全局忽略所有的空值。就像我在做JSON.net'GlobalConfiguration.Configuration .Formatters .JsonFormatter .SerializerSettings .NullValueHandling = NullValueHandling.Ignore;'在gloabl.asax.cs文件 –

相關問題