我正在创建一个适用于.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客户端。我开始认为这与操作系统有某种关系,但是我不会确定指定的确切格式吗?