JToken包含DateTime时ToString出现异常行为:如何获取JSON中lastModified字段的原始字符串值?
如何从JSON中获取原始的lastModified字符串值?
这个问题我之前也碰到过!Newtonsoft.Json(也就是Json.NET)默认会自动把ISO格式的日期字符串解析成DateTime对象,所以你直接做(string)json["lastModified"]强制转换时,其实是把DateTime转成了本地格式的字符串,自然就丢了原始的ISO格式和毫秒信息。
给你两个靠谱的解决方案:
方案一:解析JSON时禁用日期自动解析
在反序列化的时候,设置DateParseHandling.None,让Json.NET把日期字符串当作普通字符串处理,这样就能直接拿到原始值:
var jsonString = "{ \"sku\": \"articlenumber\", \"lastModified\": \"2022-05-06T10:07:23.934Z\" }"; var settings = new JsonSerializerSettings { DateParseHandling = DateParseHandling.None }; JObject json = JsonConvert.DeserializeObject<JObject>(jsonString, settings); string originalLastModified = (string)json["lastModified"]; // 输出结果就是原始的:2022-05-06T10:07:23.934Z
方案二:直接调用JToken的ToString方法
如果已经在没有特殊设置的情况下解析了JSON,也不用重新解析,直接调用JToken的ToString(Formatting.None)方法就能得到原始的ISO格式字符串:
JObject json = JObject.Parse(jsonString); string originalLastModified = json["lastModified"].ToString(Formatting.None); // 同样能拿到原始值:2022-05-06T10:07:23.934Z
至于你之前尝试的把DateTime重新序列化的方法,之所以会把毫秒置零,大概率是因为解析后的DateTime对象在某些场景下丢失了毫秒精度,而且这种方法多了一次转成DateTime再转回来的步骤,不如直接拿原始字符串来得可靠。
内容的提问来源于stack exchange,提问作者J. S. Garcia
相关产品推荐
相关产品推荐

