如何从Json字符串中过滤null或空值

时间:2013-09-01 16:52:26

标签: c# json

我有一个模型看起来像

public class DataClass
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string ContactNo { get; set; }
}

我尝试使用下面提到的代码转换Json请求。

var l=new List<Data>();
l.Add(new Data(){Name="foo",Address ="bar",ContactNo =123});
l.Add(new Data(){Name="biz",Address ="baz"});
string json=JsonConvert.SerializeObject(l);

它会给我字符串

 [{"Name":"foo","Address":"bar","ContactNo":"123"},{"Name":"biz","Address":"baz","ContactNo":""}]

在输出第二个ContactNo有一个空字符串,但我不需要没有值或NULL的字段。 任何人都可以告诉我什么是避免JSON请求中的NULL或空字段的最佳方法? 在此先感谢。

3 个答案:

答案 0 :(得分:1)

按以下方式更改模型

public class Data
{
    public string Name { get; set; }
    public string Address { get; set; }
    public int? ContactNo { get; set; }
}

然后将您的对象序列化如下

var result = JsonConvert.SerializeObject(
             l, 
             new JsonSerializerSettings() 
             { 
                 NullValueHandling = NullValueHandling.Ignore 
             });

答案 1 :(得分:1)

我假设您使用的是Json.Net。

您可以使用System.ComponentModel.DefaultValueAttribute。这允许您将属性标记为使用与null不同的默认值。

因此,如果要在JSON输出中忽略空字符串,可以将模型类更新为:

public class DataClass
{
    [DefaultValue("")]
    public string Name { get; set; }
    [DefaultValue("")]
    public string Address { get; set; }
    [DefaultValue("")]
    public string ContactNo { get; set; }
}

请注意,必须将SerializerSettings.DefaultValueHandling设置为Ignore或IgnoreAndPopulate才能获取此内容。

有关减少序列化json大小的各种方法的更全面的示例如下:

http://james.newtonking.com/archive/2009/10/23/efficient-json-with-json-net-reducing-serialized-json-size

答案 2 :(得分:0)

1.您可以在模型类中添加一个标志。

public class DataClass{
public bool isIllegal{get;set;}
public string Name { get; set; }
public string Address { get; set; }
public string ContactNo { get; set{isIllegal=!string.isNullOrEmpty(value);)}
}

2.您可以在JsonConvert.SerializeObject(l)之后过滤isIllegal为false的数据。