【问题标题】:Jil serializer ignore null propertiesJil 序列化程序忽略空属性
【发布时间】:2016-05-17 23:10:59
【问题描述】:

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

在 Newtonsoft 中是:

[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]

【问题讨论】:

标签: c# .net serialization jsonserializer jil


【解决方案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 对象来覆盖。
猜你喜欢
  • 1970-01-01
  • 2019-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-11
  • 2013-04-07
  • 1970-01-01
  • 2016-08-27
相关资源
最近更新 更多