Jil 序列化程序忽略空属性
Jil serializer ignore null properties
是否有防止 Jil 序列化 null 属性的属性?
在 Newtonsoft 中是:
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
对于整个对象,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 只尊重 [DataMember]
上的 Name
选项。我想纪念 EmitDefaultValue
并不是最难的事情,但从来没有人为它打开过 issue。
是否有防止 Jil 序列化 null 属性的属性?
在 Newtonsoft 中是:
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
对于整个对象,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 只尊重 [DataMember]
上的 Name
选项。我想纪念 EmitDefaultValue
并不是最难的事情,但从来没有人为它打开过 issue。