在MVC控制器中
我有一个public DateTimeOffset? Prop1 {get;set;}
的班级
该类由从控制器方法传递的json实例化。因此传入的值是一串ISO8601格式“YYYY-MM-DDThh:mm:ss + 08:00”。
由于某种原因,隐式转换失败并返回null。我读到某处我必须使用“k自定义格式化程序”。我如何将其设置为string-> DateTimeOffset转换的默认值?
我可以在不明确调用TryParse的情况下完成吗?
答案 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。