Jil序列化程序忽略null属性

时间:2016-02-08 10:15:37

标签: c# .net serialization jsonserializer jil

是否有一个属性可以阻止Jil序列化为null的属性?

在Newtonsoft中它是:

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]

1 个答案:

答案 0 :(得分:3)

对于整个对象,Options上的excludeNulls参数是您想要的(许多不同的选项配置已预先调整,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"}

Jil仅尊重Name上的[DataMember]选项。我认为尊敬EmitDefaultValue并不是最困难的事情,但没有人为它开过issue