5

我正在尝试使用:

JsonConvert.DeserializeObject<DateTime>( "2009-02-15T00:00:00Z", new IsoDateTimeConverter() )

但它给了我一个FormatException: Input string was not in a correct format.

我究竟做错了什么?

4

1 回答 1

5

如果您正在解析单个值,最简单的方法可能只是使用DateTime.ParseExact

DateTime value = DateTime.ParseExact(text, "o", null);

“o”模式是往返模式,设计为 ISO-8601:

"O" 或 "o" 标准格式说明符对应于 DateTime 值的 "yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffK" 自定义格式字符串和"yyyy'-'MM'-'dd'T'HH':'mm':'ss'.'fffffffzzz" DateTimeOffset 值的自定义格式字符串。

我没有指定格式提供程序,因为没关系:

此说明符的模式反映了定义的标准 (ISO 8601)。因此,无论使用的文化或提供的格式提供程序如何,它总是相同的。

如果您需要 Json.NET 在反序列化其他值的同时透明地处理此问题,这可能是一个更棘手的提议 - 其他人可能知道更多。

此外,作为一个插件,您可能希望考虑使用我的Noda Time项目,该项目支持 ISO-8601 并与 JSON.NET 集成——尽管目前还没有采用预打包的方式。

于 2013-06-25T15:25:25.070 回答