我有一个模型看起来像
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或空字段的最佳方法? 在此先感谢。
答案 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大小的各种方法的更全面的示例如下:
答案 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的数据。