将ISO 8601日期时间字符串反序列化为C#DateTime

时间:2013-06-25 15:20:35

标签: c# json.net

我正在尝试使用:

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

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

我做错了什么?

1 个答案:

答案 0 :(得分:5)

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

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

“o”模式是round-trip pattern,设计为ISO-8601:

  

“O”或“o”标准格式说明符对应于“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集成 - 尽管尚未采用预先打包的方式。