c#DateTimeOffset解析ISO8601错了吗?

时间:2015-02-06 02:10:24

标签: c# datetime

在MVC控制器中 我有一个public DateTimeOffset? Prop1 {get;set;}的班级 该类由从控制器方法传递的json实例化。因此传入的值是一串ISO8601格式“YYYY-MM-DDThh:mm:ss + 08:00”。

由于某种原因,隐式转换失败并返回null。我读到某处我必须使用“k自定义格式化程序”。我如何将其设置为string-> DateTimeOffset转换的默认值?

我可以在不明确调用TryParse的情况下完成吗?

1 个答案:

答案 0 :(得分:0)

在MVC控制器中,默认的JSON序列化程序是JavaScriptSerializer - 它不理解ISO8601格式的值。它希望日期类似于:\/Date(1337020200000+0530)\。与WCF应用程序一起使用的DataContractJsonSerializer也需要这种格式。

要支持ISO8601,最简单的方法是切换到ASP.Net WebAPI,它使用JSON.Net进行序列化。 JSON.Net使用ISO8601作为默认值(同时仍支持其他格式)。

Here is an old-but-good article describing the differences

如果您必须坚持使用MVC控制器,则可以使用JSON.Net as described here替换序列化程序。

此外,值得注意的是,虽然WebAPI今天使用JSON.Net,但默认情况下它将在即将到来的ASP.Net vNext中用于MVC。