You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 20:47:33