如果某个值而不是null,则隐藏JSON元素

时间:2018-01-26 14:31:38

标签: c# json

有一个C#类具有某些属性。在HttpResponseMessage中输出此类的对象时,我知道如果属性为null,我们可以通过使用以下

注释该属性来隐藏JSON响应中的该属性
[JsonProperty(NullValueHandling = NullValueHandling.Ignore)]

如果某个值有某种价值,有没有办法隐藏同一个属性?对于例如如果它的值是“Tennis”,不要在JSON中显示SportType属性吗?

2 个答案:

答案 0 :(得分:2)

JSON.net中,您可以使用条件conditional property serialization

public class Foo
{
    public string Id {get; set;}
    public SomeProperty Name { get; set; }    

    public bool ShouldSerializeSomeProperty()
    {
        return SomeProperty != null || SomeProperty != "Tennis";
    }
}

您可以为要定义条件序列化的每个属性定义条件方法。例如,在ShouldSerializeSomeProperty中,我为SomeProperty属性定义了一个条件。

答案 1 :(得分:2)

您可以使用ShouldSerializeX方法忽略属性的序列化取决于某些条件。

public class SampleJsonClass
{
    public int Id { get; set; }
    public string Name { get; set; }

    public bool ShouldSerializeName()
    {
        return (Name != "Tennis");
    }
}

然后

var list = new List<SampleJsonClass>()
{
    new SampleJsonClass() {Id = 1, Name = "Sample"},
    new SampleJsonClass() {Id = 1, Name = "Tennis"}
};
var serializedJson = JsonConvert.SerializeObject(list);

<强>输出

[
   {
      "Id":1,
      "Name":"Sample"
   },
   {
      "Id":1
   }
]