我檢索從WebRequest的一個JSON,我想反序列化到下面的類工作:DeserializeObject用的DateTime成員不Json.Net
public class MyData
{
public int id { get; set; }
public DateTime openTime { get; set; }
MyData() {}
}
這是我從服務器接收的JSON:
var json= @"{""Id"": ""12345"",""openTime"":""2015-09-01T12:00:00:000Z""}"
據我可以告訴這個DateTime字符串是ISO 8601,但我不明白爲什麼有三個0末尾爲毫秒和一個額外的Z.這就是我想如何將字符串轉換爲我的對象:
var responseInstance = JsonConvert.DeserializeObject<MyData>(json,new IsoDateTimeConverter());
這引發System.FormatException:String未被識別爲有效的DateTime。
當我嘗試添加的,而不是IsoDateTimeConverter這樣JsonSerializerSetting:
var deserializeSetting = new JsonSerializerSettings()
{
DateFormatHandling = DateFormatHandling.IsoDateFormat
};
var responseInstance = JsonConvert.DeserializeObject<MyData>(json,deserializeSetting);
不會拋出異常,而是日期時間會員總是顯示01.01.0001 00:00:00
謝謝你解決了這個問題。但是,我無法控制從服務器收到的內容,所以我想知道該字符串是錯誤的,還是我只是使用了錯誤的格式? – zlZimon
該字符串錯誤。如果有期限,格式將是正確的;即ISO 8601格式,這是一個標準(「Z」代表祖魯時區,即UTC時間)。你可以聯繫API的提供者來讓他們解決它嗎?如果沒有,可能會創建一個JSON轉換器來嘗試修復反序列化期間的錯誤日期。 –