2016-06-25 54 views
2

如果我將包含在json中的時間戳反序列化爲對象,它將失去毫秒級的精度。當使用JSON.net反序列化爲對象時,從時間戳丟失毫秒

var json = "{\"timestamp\":\"2016-06-16T16:27:36.808Z\"}"; 
var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(json); 
Console.WriteLine(dict["timestamp"]); 

輸出:

16/06/2016 16:27:36 

發生這種情況,即使我將對象轉換爲DateTime。

var obj = dict["timestamp"]; 
var timestamp = DateTime.Parse(obj.ToString()); 
Console.WriteLine(timestamp.ToString("yyyy/MM/dd HH:mm:ss.ffff")); 

輸出:

2016/06/16 16:27:36.0000 
+0

可能重複[強制JSON.NET包含毫秒時序列化DateTime(即使ms組件爲零)](http://stackoverflow.com/questions/18193281/force-json-net-to-include-milliseconds - 當序列化,日期時間偶數如果-MS-COM) –

回答

2

您需要更改JsonSerializerSettings並設置DateParseHandling爲 '無'。

var json = "{\"timestamp\":\"2016-06-16T16:27:36.808Z\"}"; 
var jsonSerializerSettings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.None }; 
var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(json, jsonSerializerSettings); 
var obj = dict["timestamp"]; 
Console.WriteLine(obj); 

輸出:

2016/06/16 17:27:36.8080 
4

問題僅僅是你在呼喚在兩種情況下,默認的字符串表示不包括毫秒的日期時間的ToString,所以他們都將丟失。

改變第一片段的最後一行:

var json = "{\"timestamp\":\"2016-06-16T16:27:36.808Z\"}"; 
var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(json); 
Console.WriteLine(((DateTime)dict["timestamp"]).ToString("O")); 

給出

2016-06-16T16:27:36.8080000Z

「O」 是廿四旅行格式,包括完整的精度。您可能希望使用不同的格式。