WebApi自帶json序列化對遇到時間日期字段的時候,到前端獲取的格式總是為“ 2016-07-14T15:32:44”,中間總是會帶一個T,顯然不是很友好。先是偷懶在園子里邊去找一些解決方案,嘗試了一下,然並卵。於是,自己想辦法。
1.先是查看ApiController.JsonResults<T>的源碼
其實Json<T>方法是有三個重載方法的,我們只需要在返回對象的時候調用重載方法,加上序列化對象serializerSettings參數即可,該對象的獲取可以通過
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings 來進行獲取,我們默認看到的該參數就是"yyyy'-'MM'-'dd'T'HH':'mm':'ss",那么顯而易見,最后的格式帶T就事這個參數的問題。我們只需要對這個參數重新賦值為"yyyy'-'MM'-'dd' 'HH':'mm':'ss"即可。由於這個參數是一個全局參數,我們可以在WebAPi的Register中定義並且賦值,這樣就不用在每個方法里邊都重新賦值了。
到此處,該問題算是完美解決了,但是有沒有辦法不要每個方法都加序列化的參數,程序員都是愛偷懶的。但是肯定有的。其實很簡單,分析JsonResult<T>的源碼即可發現該方法是可以被重寫的。只需要在基類方法中重寫即可。基類重寫如下:
重寫基類方法后需要注意的是,該方法由於返回值是JsonResult,也會被當做API方法,默認都是POST方法,會替換掉沒有Route特性的方法,所以臨時加了個HttpGet特性。此處還有待完善。項目中碰到的問題,記錄一下,歡迎大家拍磚!
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
園子里邊的解決方案:
引用自:http://www.cnblogs.com/wuball/p/4231343.html
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
MVC web api 返回JSON的幾種方式
1、在WebApiConfig的Register中加入以下代碼
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
2、在WebApiConfig的Register中加入以下代碼
config.Formatters.Remove(config.Formatters.XmlFormatter);
3、在WebApiApplication的Application_Start中加入以下代碼
GlobalConfiguration.Configuration.Formatters.XmlFormatter.SupportedMediaTypes.Clear();
1、在MVC中全局去除時間格式中帶T的問題。
MVC中默認使用Newtonsoft.Json序列化的,所以在WebApiConfig的Register中加入以下代碼即可
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new IsoDateTimeConverter { DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss" });
2、在webservice中去除時間帶T的問題。
IsoDateTimeConverter timejson = new IsoDateTimeConverter { DateTimeFormat = "yyyy'-'MM'-'dd' 'HH':'mm':'ss" }; //在序列化的時候傳入timejson對象 //如: return JsonConvert.SerializeObject(object, timejson);//object是需要序列化的對象