當我使用下面的代碼:newtonsoft jobject.Value <DateTime>()將無法工作
string jsonStr = JsonConvert.SerializeObject(new
{
savedAtGMT0 = DateTime.UtcNow.ToString()
});
MessageBox.Show(jsonStr);
JObject jsonObj = JObject.Parse(jsonStr);
MessageBox.Show(jsonObj["savedAtGMT0"].Value<string>());
MessageBox.Show(DateTime.Parse(jsonObj["savedAtGMT0"].Value<string>()).ToString());
MessageBox.Show(jsonObj["savedAtGMT0"].Value<DateTime>().ToString());
MessageBox.Show(jsonStr);
顯示:
{"savedAtGMT0":"20.11.2016 19:39:23"}
MessageBox.Show(jsonObj["savedAtGMT0"].Value<string>());
顯示:
20.11.2016 19:39:23
MessageBox.Show(DateTime.Parse(jsonObj["savedAtGMT0"].Value<string>()).ToString());
顯示:
20.11.2016 19:39:23
MessageBox.Show(jsonObj["savedAtGMT0"].Value<DateTime>().ToString());
拋出異常:
System.FormatException: String was not recognized as a valid DateTime.
這是爲什麼發生?我沒有指定任何格式,因此我相信它應該使用我的系統的文化格式從DateTime轉換爲字符串和從字符串轉換爲DateTime。
請注意,我相當確定過去使用相同的代碼。
我錯過了一些明顯的東西嗎?謝謝。
顯然。謝謝你的解釋。我從序列化部分刪除了'.ToString()'部分,它工作正常。我不知道那裏是如何出現的。你在哪裏找到引用的代碼btw? – LukAss741
我只是使用「導航到定義」和resharper爲我反編譯代碼,並帶我去反編譯代碼。所以基本上我用Ctrl +單擊了:) – Evk
@ LukAss741如果你沒有Resharper或.Net Reflector,你可以在[GitHub](https:// github)上瀏覽Json.Net的源代碼的.com/JamesNK/Newtonsoft.Json)。相關的代碼行位於[Extensions]類的'Convert(JToken)'方法](https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft)的末尾。 JSON/LINQ的/ Extensions.cs#L293)。 –