2012-04-25 39 views
3

我試圖反序列化轉換之後爲DateTime:在json.net

{"ts":"2012-04-22 04:14:50,669", "msg":"Hello"} 

public class LogEntry 
{ 
    public DateTime Ts { get; set; } 
    public string Msg { get; set; } 
} 

使用

var logEntry = JsonConvert.DeserializeObject<LogEntry>(line); 

卻得到了一個JsonSerializationException說 「{」轉換值\「2012-04-22 04:14:28,478 \」以鍵入「System.DateTime」時出錯。第1行,第31位「}}我無法更改日誌格式

我想我可能需要使用Converter解析日期字符串,但是我找不到任何看起來相關的JsonConverter的示例。在ReadJson方法來讀取reader值。

有沒有簡單的例子,我應該看看嗎?還是我要對這個錯誤的方式?

+0

這個問題在堆棧應用程序看起來像它做你需要:http://stackapps.com/questions/1175/how-to-convert-unix-timestamp-to-net-datetime/1176 – ilivewithian 2012-04-25 08:49:57

+0

謝謝。是的,我之前看到過,但由於ReadJson方法中的代碼已被註釋掉,所以我沒有將它看作一個很好的例子。 – Niklas 2012-04-25 08:55:10

+0

向下滾動該示例,有一個未註釋的ReadJson方法版本。無論哪種方式,這個例子的基本原理是健全的。 – ilivewithian 2012-04-25 09:05:14

回答

5

DateTime字符串的格式使用逗號作爲小數點分隔符(,478)。您可以使用適當的Culture初始化JsonSerializerSettings對象(documented here),然後使用DeserializeObject<T>(value, settings)documented here)進行反序列化。這將使用您指定的文化進行反序列化,而不是默認的InvariantCulture

+0

看起來不錯。然而,我的json.net版本(我目前因爲依賴原因而無法升級)在JsonSerializerSettings上沒有Culture或Date *屬性。 – Niklas 2012-04-25 11:42:11

+0

不幸的。 :/在這種情況下,我想你被迫下了自定義的轉換器路線。是[這個SO條目](http://stackoverflow.com/q/8030538/608457)有用嗎? – raveturned 2012-04-25 12:40:24

+0

管理得到json.net更新。你的建議工作正常。 – Niklas 2012-05-07 10:15:31

-1

我懷疑這個問題是因爲你的價值正在使用逗號作爲小數點分隔符,表明它是在使用逗號的語言環境中創建的(例如,除Engli以外的許多歐洲語言SH)。您可以嘗試更改您的語言環境以匹配,以便解析可以工作?