2015-02-06 55 views
0

在一個MVC控制器 我有一個類public DateTimeOffset? Prop1 {get;set;} 該類是由json實例化從控制器方法傳遞。所以傳入的值是一個ISO8601格式的字符串「YYYY-MM-DDThh:mm:ss + 08:00」。c#DateTimeOffset解析ISO8601錯誤?

由於某些原因,隱式轉換失敗並返回null。我在某處讀過我必須使用「k自定義格式化程序」。我如何設置爲默認的字符串 - > DateTimeOffset轉換?

我可以不顯式調用TryParse嗎?

+0

你可以試試'「yyyy-MM-DDThh:mm:ss + 08:00」'我懷疑這是錯誤的格式 – chouaib 2015-02-06 02:13:07

+0

嗯我想我解釋錯了。如果不需要指定格式字符串,隱式轉換是否可能發生? – WindowsMaker 2015-02-06 03:22:39

+0

你想'字符串'隱式轉換爲'DateTimeOffset'? – 2015-02-06 03:42:40

回答

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。