Json ISO Date不反序列化为DateTime对象
我正在创建一个适用于.net / mono的多平台应用程序,并使用Newtonsoft.Json序列化信息。
一直运行良好,直到我试图发送具有完全相同版本的Newtonsoft.Json.dll的机器之间的信息。
事实证明,日期在ISO格式中被正确序列化为: “2013-02-08T12:11:39Z” ,但是当我尝试在Mac OS上反序列化它们时,我得到一个字符串而不是DateTime对象!
我使用串行器设置做了一些实验:
private static readonly JsonSerializerSettings jsonSettings = new JsonSerializerSettings {
DateTimeZoneHandling = DateTimeZoneHandling.Utc,
DateFormatHandling = DateFormatHandling.IsoDateFormat,
DateParseHandling = DateParseHandling.DateTime,
Converters = new JsonConverter [] { new Newtonsoft.Json.Converters.IsoDateTimeConverter { DateTimeFormat = "yyyy-MM-ddTHH:mm:ssZ" } }
};
JsonConvert.DeserializeObject<object> (""2013-02-08T10:11:51Z"", jsonSettings);
但结果是直到完全相同的字符串“2013-02-08T10:11:51Z” 。 我做了一些更多的实验,结果发现,使用完全相同的设置,我无法序列化和反序列化日期:
JsonConvert.DeserializeObject<object>(JsonConvert.SerializeObject(DateTime.Now, jsonSettings), jsonSettings);
我仍然得到一个代表ISO日期的字符串。 之后我也试了一下:
JsonConvert.DeserializeObject<object>(JsonConvert.SerializeObject(DateTime.Now));
现在我得到了适当的DateTime对象。 但是运行下面的代码表明日期序列化的方式不完全是ISO格式:
JsonConvert.SerializeObject(DateTime.Now);
返回类似“”2013-02-08T12:22:25.974177 + 02:00 “”这不是标准的,并且不能用于通信。
最奇怪的是,我有一个客户端机智的Mac没有这样的问题。 我开始认为这与操作系统有某种相关性,但是那么我不能确定这个格式的确切格式吗?
链接地址: http://www.djcxy.com/p/8137.html