.NET Core 处理 WebAPI JSON 返回烦人的null为空
前言
项目开发中不管是前台还是后台都会遇到烦人的null,数据库表中字段允许空值,则代码实体类中对应的字段类型为可空类型nullable<>,如int?,datetime?,null值字段序列化返回的值都为null,前台对应字段赋值需要做null值判断,怎么才能全局把null替换为空。
本文分享webapi接口服务统一返回null替换为空的方法。
一、分析问题
.net core中使用newtonsoft.json进行序列化,webapi接口返回格式通过startup.cs类全局设置。想是否可以通过配置把null替换为空值?于是找到了newtonsoft.json在序列化和反序列化期间如何处理空值和默认值的属性,具体配置代码如下:
1、空值的处理
序列化和反序列化时需要忽略值为null的属性,设置serializersettings.nullvaluehandling的值
- nullvaluehandling.ignore 序列化和反序列化对象时忽略空值。
- nullvaluehandling.include 序列化和反序列化对象时包含空值。
2、默认值的处理
序列化和反序列化时需要忽略默认值属性,设置serializersettings.defaultvaluehandling的值
- defaultvaluehandling.ignore 序列化和反序列化时忽略默认值
- defaultvaluehandling.include序列化和反序列化时包含默认值
3、示例代码
通过上面的分析:一种是不包含属性的默认值序列化,另一种是不包含属性的null序列化,都不能满足目前的需求接口统一返回的null序列化为空。
二、解决问题
1、项目webapi默认返回的json结果格式如下:
2、需要解决的问题把所有的null替换为空,具体如下图所示:
3、解决方案
需要自己写一个nulltoemptystringresolver类,然后重写camelcasepropertynamescontractresolver,但是该方法只能解决string类型null→""的问题,对其他可空类型无效,比如:int?、datetime?等。
在startup.cs代码里面修改,标记为红色的代码,如下所示:
修改完配置,重新运行完成,实现null替换为空的效果,运行结果如下所示:
三、总结
.net core下newtonsoft.json序列化时字符串null替换成空,通过contractresolver类为属性添加一些序列化设置、自定义属性名、设置时间格式、有选择性的序列化属性等,实现webapi返回json格式统一化。
到此这篇关于.net core 处理 webapi json 返回烦人的null为空的文章就介绍到这了,更多相关.net core webapi json 返回null内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!