如何从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字段的最佳方法是什么吗?提前感谢。

如何从Json字符串中筛选null或空值

将您的型号更改为以下

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).

之后筛选isInvalid为false的数据