温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
  • 忘记密码?
登录注册×
获取短信验证码
其他方式登录
点击 登录注册 即表示同意 《亿速云用户服务条款》
  • 服务器
  • 数据库
  • 开发技术
  • 网络安全
  • 互联网科技
登 录 注册有礼
最新更新 网站标签 地图导航
产品
  • 首页 > 
  • 教程 > 
  • 开发技术 > 
  • .NET Core中WebAPI JSON返回值为null如何解决

.NET Core中WebAPI JSON返回值为null如何解决

发布时间:2021-01-13 14:12:03 来源:亿速云 阅读:315 作者:Leah 栏目: 开发技术

本篇文章给大家分享的是有关.NET Core中WebAPI JSON返回值为null如何解决,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

一、分析问题

      .NET Core中使用Newtonsoft.Json进行序列化,WebAPI接口返回格式通过Startup.cs类全局设置。想是否可以通过配置把null替换为空值?于是找到了Newtonsoft.Json在序列化和反序列化期间如何处理空值和默认值的属性,具体配置代码如下:

public void ConfigureServices(IServiceCollection services)
{
 //配置Mvc + json 序列化
 services.AddMvc()
  .AddNewtonsoftJson(options =>
  {
   //数据格式首字母小写 不使用驼峰 小驼峰firstName 大驼峰 FirstName
   options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
   //使用默认方式,不更改元数据的key的大小写
   //options.SerializerSettings.ContractResolver = new DefaultContractResolver();
   // 忽略循环引用
   options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
   // 设置时间格式
   options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
   //忽略空值 不包含属性的null序列化
   //options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
   //忽略默认值和null 1、不包含属性默认值和null
   //options.SerializerSettings.DefaultValueHandling = DefaultValueHandling.Igno
  })
}

 1、空值的处理

      序列化和反序列化时需要忽略值为null的属性,设置SerializerSettings.NullValueHandling的值

  •  NullValueHandling.Ignore 序列化和反序列化对象时忽略空值。

  •  NullValueHandling.Include 序列化和反序列化对象时包含空值。

2、默认值的处理

      序列化和反序列化时需要忽略默认值属性,设置SerializerSettings.DefaultValueHandling的值

  • DefaultValueHandling.Ignore 序列化和反序列化时忽略默认值

  • DefaultValueHandling.Include序列化和反序列化时包含默认值

3、示例代码

/*包含属性的默认值与null序列化*/
{
 "Name": null,
 "Age": 0,
 "Partner": null,
 "Salary": 0.0
}
/*不包含属性的默认值序列化*/
{
 "Name": "Hello World",
 "Age": 28
}
/*不包含属性的null序列化*/
{
 "Name": "Hello World",
 "Age": 28,
 "Salary": 0.0
}

通过上面的分析:一种是不包含属性的默认值序列化,另一种是不包含属性的null序列化,都不能满足目前的需求接口统一返回的null序列化为空。

二、解决问题

1、项目WebAPI默认返回的JSON结果格式如下:

{
 "code": 0,
 "msg": "查询成功",
 "data": {
  "id": 1,
  "title": "炎炎夏日暖暖肚",
  "describe": "",
  "author": null,
  "authorId": null,
  "linkSource": null,
  "author_Picture": null,
  "content": "炎炎夏日,很多人喜欢吃些寒凉的食物解暑,可这种做法非常伤身。",
 }
}

2、需要解决的问题把所有的null替换为空,具体如下图所示:

.NET Core中WebAPI JSON返回值为null如何解决       

3、解决方案

      需要自己写一个NullToEmptyStringResolver类,然后重写CamelCasePropertyNamesContractResolver,但是该方法只能解决string类型null→""的问题,对其他可空类型无效,比如:int?、DateTime?等。

public class NullToEmptyStringResolver : CamelCasePropertyNamesContractResolver
{
  /// <summary>
  /// 创建属性
  /// </summary>
  /// <param name="type">类型</param>
  /// <param name="memberSerialization">序列化成员</param>
  /// <returns></returns>
  protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
  {
    return type.GetProperties().Select(c =>
        {
          var jsonProperty = base.CreateProperty(c, memberSerialization);
          jsonProperty.ValueProvider = new NullToEmptyStringValueProvider(c);
          return jsonProperty;
        }).ToList();
  }
}

public class NullToEmptyStringValueProvider : IValueProvider
{
  private readonly PropertyInfo _memberInfo;
  /// <summary>
  /// 构造函数
  /// </summary>
  /// <param name="memberInfo"></param>
  public NullToEmptyStringValueProvider(PropertyInfo memberInfo)
  {
    _memberInfo = memberInfo;
  }

  /// <summary>
  /// 获取Value
  /// </summary>
  /// <param name="target"></param>
  /// <returns></returns>
  public object GetValue(object target)
  {
    var result = _memberInfo.GetValue(target);
    if (_memberInfo.PropertyType == typeof(string) && result == null)
      result = string.Empty;
    return result;
  }

  /// <summary>
  /// 设置Value
  /// </summary>
  /// <param name="target"></param>
  /// <param name="value"></param>
  public void SetValue(object target, object value)
  {
    _memberInfo.SetValue(target, value);
  }
}

在Startup.cs代码里面修改,标记为红色的代码,如下所示:

//配置MVC+JSON序列化
services
  .AddMvc(options =>{options.EnableEndpointRouting = false;})
  .AddNewtonsoftJson(options =>
  {
    //使用默认方式,不更改元数据的key的大小写
    //options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    //数据格式首字母小写 不使用驼峰  小驼峰firstName 大驼峰 FirstName
    //options.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
    options.SerializerSettings.ContractResolver = new NullToEmptyStringResolver();
    // 忽略循环引用
    options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
    // 设置时间格式
    options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
    //忽略空值 不包含属性的null序列化
    //options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
    //忽略默认值和null 1、不包含属性默认值和null
    //options.SerializerSettings.DefaultValueHandling = DefaultValueHandling.Igno
  })

修改完配置,重新运行完成,实现null替换为空的效果,运行结果如下所示:

{
 "code": 0,
 "msg": "查询成功!",
 "data": {
  "id": 1,
  "title": "炎炎夏日暖暖肚",
  "describe": "",
  "author": "",
  "authorId": "",
  "linkSource": "",
  "author_Picture": "",
  "source": 0,
  "content": "炎炎夏日,很多人喜欢吃些寒凉的食物解暑,可这种做法非常伤身。"
 }
}

三、总结

  .NET Core下Newtonsoft.Json序列化时字符串null替换成空,通过ContractResolver类为属性添加一些序列化设置、自定义属性名、设置时间格式、有选择性的序列化属性等,实现WebAPI返回JSON格式统一化。

以上就是.NET Core中WebAPI JSON返回值为null如何解决,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注亿速云行业资讯频道。

向AI问一下细节
推荐阅读:
  1. 如何在ASP.NET项目中利用Action返回值类型
  2. ASP.NET Core 3.0迁移的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

webapi json
  • 上一篇新闻:
    yii显示调试信息的方法
  • 下一篇新闻:
    yii如何没有模板引擎

猜你喜欢

  • win11防火墙关不掉的原因有哪些
  • excel区域大小不同无法粘贴如何解决
  • 如何把excel改成共享文档
  • 新疆云服务器租用可以干什么
  • 广州VPS怎么租用便宜
  • 怎么设置电脑图标的大小
  • win10自带NET无法删除如何解决
  • win10错误代码0x800701b1如何修复
  • win10硬盘里如何设置不显示文件夹
  • win10怎么查看netframework版本
最新资讯
  • 解释Zabbix中通过API集成外部数据源的方法
  • 如何在Zabbix中实施网络安全扫描和漏洞评估的监控
  • 描述Zabbix中的跨平台监控能力和配置方法
  • Zabbix如何应对和监控分布式拒绝服务攻击
  • 如何在Zabbix中部署机器学习算法以提高告警准确性
  • 解释Zabbix在金融服务行业中的应用及其监控要点
  • Zabbix支持的自定义报警声音和通知方法有哪些
  • 如何在Zabbix中利用图形和视图来展示复杂的监控数据
  • 在Zabbix中如何配置应用程序性能管理监控
  • 描述Zabbix中针对服务质量监控的最佳实践
相关推荐
  • 怎么在ASP.NET Core中自定义WebApi模型验证
  • ASP.NET Core Mvc中空返回值怎么处理
  • .NET Core WebApi中实现多态数据绑定的方法
  • .Net Core2.1 WebAPI新增Swagger插件的示例分析
  • asp.net core 2.0中webapi集成signalr的示例分析
  • Asp.net core WebApi如何使用Swagger生成帮助页
  • ASP.NET中怎么利用WebApi实现参数传递
  • ASP.NET Core WebApi怎么返回XML数据格式
  • .Net Core怎么解决WebAPI中返回时间格式带T的问题
  • .Net Core WebAPI怎么导入CSV

相关标签

javaweb salt-api webpack4.0 web前端教程 webuploader web认证 webdav mapi javaapi iwebshop 高德地图api javaweb项目 web编程 api管理 web api java api java-web webpack2 mavenweb webassembly
AI

聚圣源重生之月光少年你的名字资源裸条bilibili网页版cctv-1在线观看崔姓男孩起名最高分按家谱起名余额宝和理财通哪个收益高易基价值成长基金杀戮都市2新生女宝宝免费起名异界之华山弟子verycd.com房车俱乐部起名激情床震视频大全王力宏李云迪热吻宁波车管所公司测名起名姓宁女孩起名称电视剧妈祖无锡市起重机械维保单位名单赵丽颖昆仑饭店是真的吗红蜘蛛软件杨诗开头起名蓝天救援队怎么加入在线起名网免费测试器械公司起名的姓罗什么起名秋思的诗意情se小说淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化