Jil 序列化程序忽略空属性
Posted
技术标签:
【中文标题】Jil 序列化程序忽略空属性【英文标题】:Jil serializer ignore null properties 【发布时间】:2016-05-17 23:10:59 【问题描述】:是否有一个属性可以防止 Jil 序列化为 null 的属性?
在 Newtonsoft 中是:
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]
【问题讨论】:
你看过github.com/kevin-montrose/Jil/issues/155吗? 【参考方案1】:对于整个对象,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 是否认可“ShouldSerialize”方法或者应该添加什么? @guyAssaf 条件序列化在 .NET 中添加一个实例方法返回bool
,名称为 ShouldSerializeXXX()
,用于属性 XXX
。 Jil 尊重这一点。
@KevinMontrose:我该怎么做,当我想全局忽略所有空值时。就像我在 gloabl.asax.cs 文件中的 JSON.net GlobalConfiguration.Configuration .Formatters .JsonFormatter .SerializerSettings .NullValueHandling = NullValueHandling.Ignore;
中所做的一样
@AmitKumar 您可以调用JSON.SetDefaultOptions(Options)
来设置全局配置。这些仍然可以通过在调用点传递Options
对象来覆盖。以上是关于Jil 序列化程序忽略空属性的主要内容,如果未能解决你的问题,请参考以下文章