我遇到了Json.NET解析器的問題。根據documentation,僅使用ToString()
而沒有特殊的轉換器應該使Json保持不變。爲什麼Json.NET解析器會自動本地化它解析的日期?
但是,我的Json字符串正在被修改,它的日期會自動本地化,並且會給我造成各種各樣的問題。例如,當我給它以下字符串:
{
"_type": "Basic",
"id": "44902a0f-7842-3a2d-83bf-a874ce0b47a1",
"description": "TestBasicDescription",
"participation": 1.000000000000000,
"inception_date": "2014-02-06T20:34:00.925000+00:00",
"expiry_date": "0001-01-01T00:00:00+00:00"
}
我期望代碼
Newtonsoft.Json.Linq.JObject.Parse(content).ToString(Formatting.None);
,以產生一個字符串,它實際上是相同的。然而,我得到的是:
{
"_type": "Basic",
"id": "44902a0f-7842-3a2d-83bf-a874ce0b47a1",
"description": "TestBasicDescription",
"participation": 1.0,
"inception_date": "2014-02-06T16:34:00.925-04:00",
"expiry_date": "0001-01-01T20:00:00-04:00"
}
正如你所看到的,我的日期已經被本地化了。
更糟糕的是,在邊界日期的情況下(如上面所示的DateTime.MinValue
),這個自動本地化的值實際上是錯誤的。時區偏移導致小時值環繞,並且由於日期不能更低,所以它不會更改,從而有效地將日期轉換爲DateTime.MinValue
加上1天:將時間轉換回UTC時間(因爲它原來是這樣)日期變爲"0001-01-02T00:00:00+00:00"
。提示單元測試爆炸。
爲什麼Json.Net的行爲不像它說的那樣?有什麼辦法可以解析輸入Json然後ToString()
它究竟是,因爲它是?
你是我的英雄 – Mugen