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 序列化程序忽略空属性的主要内容,如果未能解决你的问题,请参考以下文章

Kotlinx 序列化 - 自定义序列化程序以忽略空值

csharp ASP.NET Core - Json序列化程序设置枚举为字符串并忽略空值

JSON 序列化程序如何忽略导航属性?

JSON 序列化程序如何忽略导航属性?

Jackson忽略空字段

Jackson 序列化:忽略空值(或 null)