ASP.NET WebApi 自帶Json返回日期帶T無法格式化的問題


            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是需要序列化的對象
復制代碼

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM