2016-02-08 47 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文件 –

相关问题