這是一個古老的故事,由於json沒有日期的默認格式。此外,格式/Date(.....)/假裝用的.Net(.NET不僅僅是asp.net)不容易與所有現代瀏覽器允許的JSON定製也處理:
- 的第一個問題是瀏覽器json解析函數無法理解/Date(.....)/格式。這很容易通過定製Json解析來解決。網上有很多補丁。
- 將日期發送回服務器時出現同樣的問題。但是在這種情況下,修補是非常困難的,因爲當JSON.stringify方法接受一個函數來定製json序列化時,如果你傳遞一個將每個日期轉換爲字符串「/Date(.....)/」的函數。 ..然後stringify函數ADD furteh \並將其轉換爲:「\/Date(.....)\ /」,即它轉義\ char ....但以這種方式轉換的字符串不能理解DOTNET。另一方面,如果您將日期轉換爲/Date(.....)/...不添加轉義字符,那麼...在這種情況下,您將得到錯誤的編碼。
- 此外,如果你解決了上述問題......往返服務器/客戶端/服務器後日期返回更改。具體來說,時間軸偏移量是從原始日期中減去的......這是由於.NET和瀏覽器處理時間軸的方式不同。
- upshot只是調用瀏覽器JSON.stringify函數...所以它沒有空間來定製日期。
,如果你使用MVC控件工具包項目的client blocks功能(我的協調人),你可以使用「增強型」基因敲除自動處理問題1和2在下一版本進來幾個天我也將添加自動處理問題3. 但是...這不會解決結果的問題...因爲我鉤了knokout映射插件的映射功能,沒有被upshot用來發回數據服務器......因爲upshot直接調用JSON.stringify ...似乎沒有辦法解決這個問題......除了修改upshot以在發佈數據時處理json自定義格式。
在客戶端塊的upcomig版本中,我將提供一個UpdateManager類,它可以完成與結果處理「相似」的工作,以便正確處理日期......但是,由於它使用了完全不同的更新策略,因此它永遠不會取代結果...而且只是一個選項而已,不是替代品。 所以我希望在最終發佈的結果中可以定製json格式的數據。
我在這裏發現了JSON.net格式化日期的另一個問題。 如果我使用替換的JSON.Net格式化程序,那麼日期會很好,並且可以很容易地轉換爲JS日期對象。 但如果你想發送實體回服務器 - 它失敗。不知何故,如果格式化程序取代了defaultjson格式化程序,desrialisation似乎不起作用... – Obiwan007 2012-03-27 11:42:28