Json序列化时,有没有办法过滤空字符串?

张天星 2019-04-03 02:50:34
protected JsonSerializerSettings jsonSetting = new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Ignore,
DateFormatString = "yyyy-MM-dd HH:mm:ss",
};
这个配置,智能过滤null的字符串,而""空字符串就无法过滤掉。
有什么办法处理么
...全文
1696 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
stherix 2019-04-04
  • 打赏
  • 举报
回复
上面那个方法也是可以的,不用改动实体类 JsonProperty有个ShouldSerialize委托 可以这么写 p.ShouldSerialize = x => !string.IsNullOrEmpty((string)x);
stherix 2019-04-04
  • 打赏
  • 举报
回复
前面是我想当然了 不过还有另外一种方法 比如实体 public class Employee { public string Name { get; set; } public string Sex { get; set; } } 里面可以加上这样的方法,就是ShouldSerialize加字段名 public bool ShouldSerializeSex() { return !string.IsNullOrEmpty(Sex); } 可以让json.net识别这个字段是否要序列化,但是必须是public方法
张天星 2019-04-04
  • 打赏
  • 举报
回复
引用 1 楼 stherix 的回复:
你可以自定义哪些字段是否输出
https://www.cnblogs.com/yanweidie/p/4605212.html
其中第七条
通过判断JsonProperty的Value类型,如果是string,而且为"",那么就不输出这个字段

private List<string> removeNames = new List<string>();

protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
IList<JsonProperty> list = base.CreateProperties(type, memberSerialization);
//删除空字符串
foreach (JsonProperty item in list)
{
if(item.PropertyType.Name == "String")
{
//值等于空字符串的排除 测试
//if(item.PropertyName == "MAC" || item.PropertyName == "IMEI")
//{
// removeNames.Add(item.PropertyName);
//}
这中间应该怎么取值呢
}
}
return list.Where(p => !removeNames.Contains(p.PropertyName)).ToList();
}
张天星 2019-04-04
  • 打赏
  • 举报
回复
引用 5 楼 stherix 的回复:
上面那个方法也是可以的,不用改动实体类
JsonProperty有个ShouldSerialize委托
可以这么写
p.ShouldSerialize = x => !string.IsNullOrEmpty((string)x);

多谢,我最后也想了个办法,是在你说的那个重写的方法中,做了默认值过滤

protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
{
IList<JsonProperty> list = base.CreateProperties(type, memberSerialization);
//删除空字符串
foreach (JsonProperty item in list)
{
if(item.PropertyType.Name == "String")
{
item.DefaultValue = "";
item.DefaultValueHandling = DefaultValueHandling.Ignore;
}
}
return list;
}
张天星 2019-04-03
  • 打赏
  • 举报
回复
引用 1 楼 stherix 的回复:
你可以自定义哪些字段是否输出
https://www.cnblogs.com/yanweidie/p/4605212.html
其中第七条
通过判断JsonProperty的Value类型,如果是string,而且为"",那么就不输出这个字段

能说说怎么具体怎么写么?
我尝试去判断类型和字段名,但是不知道应该怎么获取值,
又怎样将这条数据作废掉:

IList<JsonProperty> list = base.CreateProperties(type, memberSerialization);
//删除空字符串
foreach (JsonProperty item in list)
{
if(item.PropertyType.Name == "String")
{
这中间应该怎么取值,取值后判断是string.Empty,又怎么操作让这个数据不输出
}
}
return list;
stherix 2019-04-03
  • 打赏
  • 举报
回复
你可以自定义哪些字段是否输出 https://www.cnblogs.com/yanweidie/p/4605212.html 其中第七条 通过判断JsonProperty的Value类型,如果是string,而且为"",那么就不输出这个字段

110,565

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧