2013-03-05 70 views
4

好吧我想不通爲什麼JsonConvert.SerializeObject序列化DateTime對象比JsonSerializer.Serialize不同。JsonConvert.SerializeObject vs JsonSerializer.Serialize

鑑於類

public class Test 
{ 
    [JsonConverter(typeof(JavaScriptDateTimeConverter))] 
    public DateTime DeliveryDate { get { return DateTime.Now; } } 
} 

@Html.Raw(JsonConvert.SerializeObject(new Test()))

輸出:

"DeliveryDate": "2013-03-01T07:00:00.000Z" 

,但是當我在JsonNetResult使用JsonSerializer.Serialize像: http://james.newtonking.com/archive/2008/10/16/asp-net-mvc-and-json-net.aspx

我得到以下出來把:

"DeliveryDate": new Date(1362520794703) 

我不明白爲什麼有這種不一致。我原以爲JsonConvert.SerializeObject會在內部使用JsonSerializer

+0

我想指出的是,我希望提到'JsonNetResult'輸出日期,如'「2013-03-01T07:00:00.000Z」' – 2013-03-05 22:05:03

回答

4

好吧我已經想通了,我想分享以防萬一有人遇到這種情況。

所以很久以前我在串行化DateTime對象在MVC4中的JsonResult有麻煩。基本上我的DateTime對象被序列化爲"\/Date(1239018869048)\/"我認爲我從作者的JSON.NET上讀到了SO的答案,建議將[JsonConverter(typeof(JavaScriptDateTimeConverter))]添加到模型類的DateTime屬性中,並在視圖中使用@Html.Raw(JsonConvert.SerializeObject(Model)。所以我確實足夠了我做到了這一點,並修復了我在當時的短期問題

時間流逝,今天我需要支持在用戶向服務器發佈一些東西后即時更新javascript viewModel。這導致我今天的錯誤。那麼事實證明,我所有的DateTime屬性都用該屬性修飾,當我嘗試將它們序列化回客戶端時,序列化程序WAS的行爲與預期相似。這導致我認爲JsonConvert.SerializeObject實際上是不是尊重屬性。

我刪除了違規屬性後,一切都開始奏效了。調整週圍的東西,我發現我可以使用默認DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind,我可以忘記我的日期時間字符串中的Z

相關問題