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

本文关键字:时间戳 反序列化 net JSON 对象 使用 | 更新日期: 2023-09-27 17:49:14

如果我将json中包含的时间戳反序列化到一个对象,它将失去毫秒精度。

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

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

问题仅仅是您在两种情况下都在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 - 16 t16:27:36.8080000z

"O"是包含全精度的往返格式。您可能希望使用不同的格式

您需要更改JsonSerializerSettings并将DateParseHandling设置为'None'。

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