Sco*_*ott 2 .net c# json json.net deserialization
如果我将json中包含的时间戳反序列化为对象,则会丢失它的毫秒精度.
var json = "{\"timestamp\":\"2016-06-16T16:27:36.808Z\"}";
var dict = JsonConvert.DeserializeObject<Dictionary<string, object>>(json);
Console.WriteLine(dict["timestamp"]);
Run Code Online (Sandbox Code Playgroud)
输出:
16/06/2016 16:27:36
Run Code Online (Sandbox Code Playgroud)
即使我将对象转换为DateTime,也会发生这种情况.
var obj = dict["timestamp"];
var timestamp = DateTime.Parse(obj.ToString());
Console.WriteLine(timestamp.ToString("yyyy/MM/dd HH:mm:ss.ffff"));
Run Code Online (Sandbox Code Playgroud)
输出:
2016/06/16 16:27:36.0000
Run Code Online (Sandbox Code Playgroud)
问题仅在于您在两种情况下都在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"));
Run Code Online (Sandbox Code Playgroud)
给
2016-06-16T16: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);
Run Code Online (Sandbox Code Playgroud)
输出:
2016/06/16 17:27:36.8080
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |