前言
之前也曾几次遇到这个问题,不过那时候只是让前端用replace替换掉,治标不治本,现在想直接治本。
问题
ASP.NET Core 返回Json数据的时候,如果数据中含有DateTime类型的话,那么json化的时候,会含有一个T
//类似这种含有T的DateTime
"add_time": "2019-09-22T14:21:37"
解决方法
修改部分ASP.NET Core 的Startup.cs中ConfigureServices的代码
services.AddMvc().AddJsonOptions(options=>
{
//options是MvcJsonOptions类型
//options.SerializerSettings是JsonSerializerSettings类型
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm";
});
原因
ASP.NET Core 3.0 以下使用的默认Json序列化器是Newtonsoft.Json
3.0的默认Json序列化器替换成了System.Text.Json
而Newtonsoft.Json在进行序列化的时候会参考JsonSerializerSettings类进行序列化,而ASP.NET Core有一个全局的JsonSerializerSettings,也就是MvcJsonOptions的SerializerSettings属性
以上分析含有部分的猜测,如有错误,还望大佬指出
通过ILSpy对JsonSerializerSettings类进行反编译的时候。
internal const string DefaultDateFormatString = "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
public string DateFormatString
{
get
{
return _dateFormatString ?? "yyyy'-'MM'-'dd'T'HH':'mm':'ss.FFFFFFFK";
}
set
{
_dateFormatString = value;
_dateFormatStringSet = true;
}
}
看到这两个时候估计就能猜个大概了,Newtonsoft.json在对DateTime类型Json化的时候,会用到DateFormatString属性,而DateFormatString默认使用的是"yyyy’-‘MM’-‘dd’T’HH’:‘mm’:'ss.FFFFFFFK"