NetCore 统一处理 webapi 返回null 转为“”
数据库中部分表字段允许空值,则代码中实体类对应的字段类型为可空类型Nullable<>,如int?,DateTime?,null值字段序列化返回的值都为null,前端对应字段赋值需要做null值判断,随想到全局把null替换为""
网上找的方案都是重写了DefaultContractResolver,但是该方法只能解决string类型null→""的问题,对其他可空类型无效。
研究了下git 上Newtonsoft.Json和.netcore MVC的源码
最终使用自定义JsonOutputFormatter方式实现:
public class MyJsonOutputFormatter : JsonOutputFormatter{public MyJsonOutputFormatter(JsonSerializerSettings serializerSettings) : base(serializerSettings, ArrayPool<char>.Shared){}public new JsonSerializerSettings SerializerSettings => base.SerializerSettings;protected override JsonWriter CreateJsonWriter(TextWriter writer){if (writer == null){throw new ArgumentNullException(nameof(writer));}var jsonWriter = new NullJsonWriter(writer){ArrayPool = new JsonArrayPool<char>(ArrayPool<char>.Shared),CloseOutput = false,AutoCompleteOnClose = false};return jsonWriter;}}public class NullJsonWriter : JsonTextWriter{public NullJsonWriter(TextWriter textWriter):base(textWriter){}public override void WriteNull(){this.WriteValue(String.Empty);}}
在 Startup 代码里面 修改
//services.AddMvc().AddJsonOptions(option => {// //配置大小写问题,默认是首字母小写,该配置根据项目需要更改// //option.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();// //配置序列化时时间格式为时间戳// //option.SerializerSettings.ContractResolver = new NullToEmptyStringResolver();// option.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";//});services.AddMvc(config =>{var settings = new JsonSerializerSettings();//设置首字母小写,如果不需要 则改为 DefaultContractResolversettings.ContractResolver = new CamelCasePropertyNamesContractResolver();//统一设置JsonResult中的日期格式 settings.DateFormatString = "yyyy-MM-dd HH:mm:ss";config.OutputFormatters.Insert(0, new MyJsonOutputFormatter(settings));});
转载于:https://www.cnblogs.com/rtwo/p/11578753.html
NetCore 统一处理 webapi 返回null 转为“”相关推荐
- jackson设置返回null为空字符串
1.将接口返回的字段为null的设置为空字符串: import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jacks ...
- asp.net core 使用newtonsoft完美序列化WebApi返回的ValueTuple
由于开发功能的需要,又懒得新建太多的class,所以ValueTuple是个比较好的偷懒方法,但是,由于WebApi需要返回序列化后的json,默认的序列化只能将ValueTuple定义的各个属性序列 ...
- Spring Boot 无侵入式 实现 API 接口统一 JSON 格式返回
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 无侵入式 统一返回JSON格式 其实本没有没打算写这篇博客 ...
- java异常统一处理,Controller层的异常统一处理及返回
Controller层的异常统一处理及返回 一.为什么要做这件事? 不知道你平时在写Controller层接口的时候,有没有注意过抛出异常该怎么处理,是否第一反应是想着用个try-catch来捕获异常 ...
- Spring Boot 无侵入式 实现API接口统一JSON格式返回
作者 | 小魏小魏我们去那里呀 来源 | blog.csdn.net/qq_34347620/article/details/102239179 无侵入式 统一返回JSON格式 其实本没有没打算写这篇 ...
- distinct返回null报错_distinct
刚布署了的mysql查询报错: this is incompatible with DISTINCT 解决方法: 在mysql 配置文件my.ini 或者my.cnf 里添加: [mysqld] sq ...
- Spring Boot配置统一格式Result返回值(一)
在Web开发中,前后端分离开发已经深入人心,这样的开发模式对于开发优雅美观的web应用非常有益.我在网上查阅了一些资料,学习了在Spring Boot开发中使用有利于前端小伙伴合作开发的统一格式返回值 ...
- PHPjson转数组返回NULL
PHPjson转数组返回NULL 1.html_entity_decode函数是 把 HTML 实体转换为字符,引号字符转为引号 2.json_encode 转为数组 $lists = json_de ...
- R语言dim函数返回NULL
R语言dim函数返回NULL 目录 R语言dim函数返回NULL 问题: 解决: dim函数可以返回dataframe.maitrix的shape; 一个常见的错误是将dim应用于一维向量或数组. 问 ...
最新文章
- 2017可以兼容那些jdk_2019从头跃——核心基础:何为JDK?Java开发工具包须知总览...
- 今天俺要说一说工厂方法模式(Factory)
- 2信号处理之:信号产生原因,进程处理信号行为,信号集处理函数,PCB的信号集,sigprocmask()和sigpending(),信号捕捉设定,sigaction,C标准库信号处理函数,可重入函数,
- [HNOI2010]公交线路
- Cookie操作以及如何在js中调用jsp变量
- 已婚男人的心理五大变化
- springmvc异常处理器
- mysql报tns无监听_oracle提示TNS:无监听程序的解决办法
- [LeetCode] Plus One 加一运算
- 分享Visual SVN Hook Script—— 允许客户端编辑SVN log message
- Directshow 采集-截屏和显示
- python learning note
- 利用Cytoscape进行生物相互作用网络可视化及拓扑分析
- 精密测量专题2--光栅基片预处理
- 转-国内移动广告平台的现状对比(2010年8月-10月)
- cad渐开线齿轮轮廓绘制_CAD渐开线齿形怎么绘制
- DAX Calculate的使用说明
- 如何禁止鼠标唤醒Win10?
- excel通过合并单元格“增加行高”(大于最大行高409)
- 网站中的js代码欢迎语,早上好,下午好……