關於DateTime對象序列化為Json之后的若干問題


將Datetime對象序列化成Json對象是常有的事情,微軟的序列化方法會將Datetime對象序列化成一個字符串:

"\/Date(1234656000000)\/"

這樣的字符串相當之不友好,但微軟貌似喜歡,並且Json.net在4.5之前也是這么做的。現在的Json.net在序列化的時候,會將其轉換為ISO標准時間:

"2009-02-15T00:00:00Z"

在使用Json.net的時候,我們還可以使用其默認的DateTime轉換器來處理,這樣轉換的字符串為:

JsonConvert.SerializeObject(entry, new JavaScriptDateTimeConverter());

 輸出結果如下:

new Date(1234656000000)

 

對於這三種格式,其優劣不好做出評判,但處理這個兼容問題還是挺頭疼的。單從字符串上面看,第三種是最好的,直接可以轉換為一個js的Date對象,但筆者嘗試這么用的時候發現,jquery在處理這個返回字符串的時候,會發生錯誤,invalid json,貌似不合法,其中包含了可執行的對象,不是嚴格的字符串了。

第二種格式更是惡心,因為在使用IE將其轉換的時候,居然發現不支持。果斷的拋棄之。

第一種格式是迫不得已,也是兼容性最好的,如果不適用Json.net,微軟的DataContractJsonSerializer或者JavaScriptSerializer都是生成這樣的字符串。那么,在HTML中得到這種返回字符串的時候,我們必須進行一次轉換,將其轉換為Date對象,不知道你們有什么好方法,我一直用的下面的代碼:

Date.FromMSJsonString = function (value) {
    var d = eval('new ' + (value.replace(/\//g, '')));
    return d;
}

在轉換完成以后,就可以Date對象進行處理了,最后附上如何讓Json.net 生成微軟的字符串格式:

  JsonSerializerSettings microsoftDateFormatSettings = new JsonSerializerSettings
  {
    DateFormatHandling = DateFormatHandling.MicrosoftDateFormat
  };
  string microsoftJson = JsonConvert.SerializeObject(entry, microsoftDateFormatSettings);

 

 

 


免責聲明!

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



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