如何从Json字符串中筛选null或空值
本文关键字:筛选 null 空值 字符串 Json | 更新日期: 2023-09-27 18:29:52
我有一个模型,它看起来像
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或Empty字段的最佳方法是什么吗?提前感谢。
将您的型号更改为以下
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
});
我假设您使用的是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
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).