1

我有一个模型,它看起来像

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 字段的最佳方法是什么?提前致谢。

4

3 回答 3

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 
             });
于 2013-09-01T16:55:47.617 回答
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

于 2016-02-17T11:17:10.510 回答
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的数据。

于 2013-09-02T00:23:19.707 回答