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();
//设置首字母小写,如果不需要 则改为 DefaultContractResolver
settings.ContractResolver = new CamelCasePropertyNamesContractResolver();
//统一设置JsonResult中的日期格式
settings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
config.OutputFormatters.Insert(0, new MyJsonOutputFormatter(settings));
});
NetCore 统一处理 webapi 返回null 转为“”的更多相关文章
- ASP.NET Core WebApi 返回统一格式参数(Json 中 Null 替换为空字符串)
相关博文:ASP.NET Core WebApi 返回统一格式参数 业务场景: 统一返回格式参数中,如果包含 Null 值,调用方会不太好处理,需要替换为空字符串,示例: { "respon ...
- .NetCore自定义WebAPI返回Json的格式大小写的三种方式
.NetCore的Controller/WebAPI可以帮我们将返回结果自动转换为Json格式给前台,而且可以自由设定格式(大写.小写.首字母大写等),我总结了三种方法,对应三种灵活度,供大家参考 ( ...
- WebApi返回Json格式字符串
WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉都不怎么好. 先贴一下, 网上给的常用方法吧. 方法一:(改配置法) 找到Global.asax文件,在 ...
- webapi返回json格式优化
一.设置webapi返回json格式 在App_Start下的WebApiConfig的注册函数Register中添加下面这代码 config.Formatters.Remove(config.For ...
- (转)WebApi返回Json格式字符串
原文地址:https://www.cnblogs.com/elvinle/p/6252065.html WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉 ...
- webapi返回json格式优化 转载https://www.cnblogs.com/GarsonZhang/p/5322747.html
一.设置webapi返回json格式 在App_Start下的WebApiConfig的注册函数Register中添加下面这代码 1 config.Formatters.Remove(config.F ...
- 使用newtonsoft完美序列化WebApi返回的ValueTuple
由于开发功能的需要,又懒得新建太多的class,所以ValueTuple是个比较好的偷懒方法,但是,由于WebApi需要返回序列化后的json,默认的序列化只能将ValueTuple定义的各个属性序列 ...
- C#操作xml SelectNodes,SelectSingleNode总是返回NULL 与 xPath 介绍
一. SelectNodes,SelectSingleNode总是返回NULL 下面以一个简单的xml为例: <?xml version="1.0"?> <mes ...
- webapi返回文件流
逻辑说明 webapi返回类型为IHttpActionResult接口,内部方法返回HttpResponseMessage. public interface IHttpActionResult { ...
随机推荐
- Nginx 核心配置-自定义错误页面
Nginx 核心配置-自定义错误页面 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 生产环境中错误页面一般都是UI或开发工程师提供的,他们已经在软件中定义好了,我们这里就简单写个h ...
- NBU恢复数据库数据文件报错RMAN-06091
RMAN-06091: no channel allocated for maintenance (of an appropriate type) 一.错误信息 报错信息如下 Starting res ...
- 搜狐视频 登录 md5 加密破解
这是一个简单的md5加密,可以学习一下js加密的破解流程,当一个入门级的教程 第一步:请求抓包 password是32位的字母和数字组合,猜测可能是md5加密,我们md5在线工具上试一下 发现我们的猜 ...
- 实验十四 团队项目评审&课程学习总结
项目 内容 这个作业属于哪个课程 2016计算机科学与工程学院软件工程(西北师范大学) 这个作业的要求在哪里 实验十四 团队项目评审&课程学习总结 团队名称 快活帮 作业学习目标 (1)掌握软 ...
- centos7.7离线安装nginx
一.1.安装openssl,因为编译安装nginx需要指定openssl目录 mkdir /data/openssl -p cd /data/openssl wget https://www.open ...
- 12-赵志勇机器学习-Label_Propagation
(草稿) 过程: 1. 初始化所有节点的 labels 成唯一的值: 2. 对每个节点,将 label 更新为和其相连的所有节点中,标签最多的 节点的label: 2. 初始化情况下,假如所有相连的节 ...
- selenium send_keys慢,卡,怎么办?这里有你想要的解决方案
相信各位看官在用selenium时,会发现发送长字符时,一个字符一个字符在输入,特别在使用chrome时,更加明显. 如果你的网页是要大量编辑的怎么处理呢? 一.send_keys机制 既然问题出来了 ...
- Pandas | 22 时间差
时间差(Timedelta)是时间上的差异,以不同的单位来表示.例如:日,小时,分钟,秒.它们可以是正值,也可以是负值.可以使用各种参数创建Timedelta对象,如下所示 - 字符串 通过传递字符串 ...
- 关于System.InvalidOperationException异常
什么是InvalidOperationException 操作无效异常.当方法调用对对象的当前状态无效时引发的异常. 继承 Object Exception SystemException Inval ...
- 表格插件BootStrap-Table使用教程
Bootstrap table 是一款基于 Bootstrap 的 jQuery 表格插件,功能比较完备,能够实现数据异步获取,编辑,排序等一系列功能. 官网https://bootstrap-tab ...