【发布时间】:2016-05-17 23:10:59
【问题描述】:
是否有一个属性可以防止 Jil 序列化为 null 的属性?
在 Newtonsoft 中是:
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
【问题讨论】:
标签: c# .net serialization jsonserializer jil
是否有一个属性可以防止 Jil 序列化为 null 的属性?
在 Newtonsoft 中是:
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
【问题讨论】:
标签: c# .net serialization jsonserializer jil
对于整个对象,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。
【讨论】:
bool,名称为 ShouldSerializeXXX(),用于属性 XXX。 Jil 尊重这一点。
GlobalConfiguration.Configuration .Formatters .JsonFormatter .SerializerSettings .NullValueHandling = NullValueHandling.Ignore; 中所做的一样
JSON.SetDefaultOptions(Options) 来设置全局配置。这些仍然可以通过在调用点传递Options 对象来覆盖。