2015-02-06 4 views
0

В контроллере MVC У меня есть класс с public DateTimeOffset? Prop1 {get;set;} Класс создается экземпляром json, который передается из метода контроллера. Таким образом, переданное значение представляет собой строку формата ISO8601 «YYYY-MM-DDThh: mm: ss + 08: 00».C# DateTimeOffset разобрать ISO8601 неправильно?

По какой-то причине неявное преобразование завершается с ошибкой и возвращает значение null. Я где-то читал, что мне нужно использовать «k custom formatter». Как бы установить значение по умолчанию для преобразования string-> DateTimeOffset?

Могу ли я сделать это без явного вызова TryParse?

+0

вы можете попробовать '' yyyy-MM-DDThh: mm: ss + 08: 00 "' Я сомневаюсь, что это неправильный формат – chouaib

+0

mmm Я думаю, что я объяснил неправильно. Возможно ли, что неявное преобразование произойдет без меня, чтобы указать строку формата? – WindowsMaker

+0

Вы хотите, чтобы строка была неявно преобразована в 'DateTimeOffset'? –

ответ

0

В контроллере MVC по умолчанию JSON-сериализатор представляет собой JavaScriptSerializer - который не понимает форматированные значения ISO8601. Он ожидает, что даты будут примерно такими: \/Date(1337020200000+0530)\. DataContractJsonSerializer, используемый с приложениями WCF, также ожидает этого формата.

Для поддержки стандарта 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, он будет использоваться в MVC по умолчанию с предстоящим ASP.Net vNext.

Смежные вопросы