我在使用Json.Net 6.0.3(我也可以在6.0.6上复制该问题)反序列化日期时间时遇到了问题。代码在Windows 8.1的.Net 4.5中运行,文化为en-GB。
以下是问题的演示:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
var d1 = new DateTimeOffset(2014, 12, 15, 18, 0, 0, TimeSpan.FromHours(1));
var obj = new {
time = d1
};
var json = JsonConvert.SerializeObject(obj, Formatting.Indented);
Console.WriteLine(json);
var jo = JObject.Parse(json);
Console.WriteLine(jo.Value<string>("time") + " // jo.Value<string>(\"time\")");
Console.WriteLine(jo["time"] + " // jo[\"time\"]");
输出结果:
{
"time": "2014-12-15T18:00:00+01:00"
}
12/15/2014 17:00:00 // jo.Value<string>("time")
15/12/2014 17:00:00 // jo["time"]
日期时间格式因访问 JObject 的方式而异,一个是 MM/DD/YYYY,另一个是 DD/MM/YYYY。为什么会这样呢?
我不需要它们以特定的格式出现:问题在于格式会改变。我有很多旧代码解析自 Json.Net 的日期时间字符串。该代码也将在世界各地的不同计算机上运行,可能使用不同的文化。
有没有办法让 Json.Net 总是以相同的格式返回日期时间?
JValue
的ToString
方法调用底层值(在这种情况下是DateTime
)的ToString
方法。 - Andrew Whitaker