使用JSON.net反序列化为对象时,从时间戳丢失毫秒

时间:2016-06-25 22:52:03

标签: c# .net json json.net deserialization

如果我将json中包含的时间戳反序列化为对象,则会失去它的毫秒级精度。

response.headers['Content-Type'].match(/text\/application//json/i)

输出:

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

即使我将对象转换为DateTime,也会发生这种情况。

16/06/2016 16:27:36

输出:

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

2 个答案:

答案 0 :(得分:5)

问题仅在于您在两种情况下都在DateTime上调用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”是包含全精度的往返格式。您可能希望使用其他格式。

答案 1 :(得分:3)

您需要更改JsonSerializerSettings并将DateParseHandling设置为&#39; None&#39;。

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