C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法

时间:2023-11-25 17:12:02

原文:C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法

本人新手,在.Net中写WebAPI的时候,当接口返回的json数据含有日期时间类型的字段时,总是在日期和时间中夹着一个字母T;微软这么设置可能有其内在的初衷,但是对于我来说,这样的格式不是很方便,前端同学展示出来的时候也总是要记得处理一下显示格式。曾经问过部门内一位老鸟,老鸟的反应告诉我这在微软的框架下做json转换是不可避免的;当初一度放弃了这个问题。后来突然冷静分析了一下,微软不可能做的这么绝的吧。

从博客园里找到了一篇亲测有效的文章,有需要的可以去参考下。本文主要作为自己学习过程的问题记录,以加深自己的理解。


我的开发环境是.Net Framework 4.7.1下的WebAPI。直接调的ApiController自带的Ok(object content)方法,日期时间类型的格式问题如上描述。

1、框架在ApiController里面定义了很多现成的成员方法和属性。其中几个如下:

C#  WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法

我所使用的就是最下面的方法。

2、其实,Json<T>方法是可以直接调用返回json数据给前端的;仔细查看发现,该方法的第一个重载方法有三个参数,第二个参数就是json序列化的相关设置。这给我们一个提示:我们可以自行调用Json<T>方法,序列化相关的设置参数根据自己的需要传一个Newtonsoft.Json.JsonSerializerSettings类型的对象过去即可。

3、但是,我是直接调用的框架的Ok方法,这个方法在框架内部是如何转json的我还不清楚(先挖个坑,日后明白了来填);也就是我并没有任何显示给序列化参数赋值的行为,那么可以推测,.net是不是从全局静态配置中读的呢?通过GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings拿到这个json序列化设置参数,据上面那位仁兄跟踪发现,这个值默认是"yyyy'-'MM'-'dd'T'HH':'mm':'ss"。那么原因显而易见了,.net取这个量调的Json<T>方法无疑了。或者说.Net下的Ok方法也是间接调用的这个方法实现的转json。

4、在WebApiConfig文件中重置GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings为自定义的时间格式即可。

C#  WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法