2

我正在创建一个可在 .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。我开始认为这在某种程度上与操作系统有关,但是我指定的确切格式不能解决这个问题吗?

4

0 回答 0