C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法
Posted lonelyxmas
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法相关的知识,希望对你有一定的参考价值。
原文:C# WebAPI中DateTime类型字段在使用微软自带的方法转json格式后默认含T的解决办法
本人新手,在.Net中写WebAPI的时候,当接口返回的json数据含有日期时间类型的字段时,总是在日期和时间中夹着一个字母T;微软这么设置可能有其内在的初衷,但是对于我来说,这样的格式不是很方便,前端同学展示出来的时候也总是要记得处理一下显示格式。曾经问过部门内一位老鸟,老鸟的反应告诉我这在微软的框架下做json转换是不可避免的;当初一度放弃了这个问题。后来突然冷静分析了一下,微软不可能做的这么绝的吧。
从博客园里找到了一篇亲测有效的文章,有需要的可以去参考下。本文主要作为自己学习过程的问题记录,以加深自己的理解。
我的开发环境是.Net Framework 4.7.1下的WebAPI。直接调的ApiController自带的Ok(object content)方法,日期时间类型的格式问题如上描述。
1、框架在ApiController里面定义了很多现成的成员方法和属性。其中几个如下:
我所使用的就是最下面的方法。
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的解决办法的主要内容,如果未能解决你的问题,请参考以下文章
C# 接口中DateTime类型字段返回年月日格式,去掉时分秒的数据
C# 接口中DateTime类型字段返回年月日格式,去掉时分秒的数据
SQL SERVER2005数据库有个字段以datetime类型允许为空 在C#怎么样把这个时间字段赋为null
在为 Date SQL Server 字段添加 DateTime C# 值时,我应该使用 Date 还是 DateTime SqlDbType?