1. 程式人生 > >C# WebAPI中DateTime類型字段在使用微軟自帶的方法轉json格式後默認含T的解決辦法

C# WebAPI中DateTime類型字段在使用微軟自帶的方法轉json格式後默認含T的解決辦法

ria 重載方法 靜態 http bapi nts href 方法 edi

原文: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的解決辦法