Одностраничное приложение MVC 4 и DateTime

Играя с новым инструментарием одностраничных приложений MVC 4, я заметил, что ни один из найденных мною примеров не содержит примера обновления DateTime через WebApi. Вскоре я выяснил, почему.

Я начал с генерации стандартного SPA из предоставленного шаблона. Затем я открыл TodoItem.cs и добавил поле DateTime. Затем я создал контроллер, как указано в комментариях. (Без поля даты все работает просто отлично).

После того как все сгенерировалось, я запустил приложение и перешел к индексу контроллера (я назвал контроллер "tasks"). Как и ожидалось, я получил страницу сетки с 0 записями и нажал на кнопку добавления. Как и ожидалось, я перешел на страницу редактирования и ввел некоторые данные, включая дату в мое новое блестящее поле datetime. Затем я нажал кнопку сохранить.

Возникла ошибка, которая гласила:

Ошибка сервера: Код состояния HTTP: 500, сообщение: There was an error deserializing the object of type System.Web.Http.Data.ChangeSetEntry[]. Содержимое DateTime '01/01/2012' не начинается с '/Date(' и не заканчивается ')/', как требуется для JSON.

Похоже, что инструментарий пока не поддерживает DateTime. Я уверен, что мог бы разобраться и потратить немного времени, чтобы понять это и заставить это работать, но я подумал, что мне может повезти с кем-то, кто уже решил эту проблему и может предоставить информацию.

Кто-нибудь уже боролся с этим?

Обновление: Я добавляю больше информации, которую я нашел после того, как задал этот вопрос. Я попробовал использовать JSON.Net в качестве моего форматера, как предложено ниже. Я думаю, что это будет окончательным решением, однако, просто сделать так, как рекомендовал постер ниже, недостаточно.

При использовании сериализатора JSON.Net я получаю следующую ошибку:

This DataController does not support operation 'Update' for entity 'JObject'.

Причина в том, что JSON.Net не полностью заполняет объект, который форматер пытается десериализовать (System.Web.Http.Data.ChangeSet).

Присылаемый json выглядит так:

[{"Id":"0",
  "Operation":2,
  "Entity":
    {"__type":"TodoItem:#SPADateProblem.Models",
     "CreatedDate":"/Date(1325397600000-0600)/",
     "IsDone":false,
     "Title":"Blah",
     "TodoItemId":1},
  "OriginalEntity":
    {"__type":"TodoItem:#SPADateProblem.Models",
     "CreatedDate":"/Date(1325397600000-0600)/",
     "IsDone":false,
     "Title":"Blah",
     "TodoItemId":1}
}]

Встроенный Json Formatter способен восстановить этот Json в объект ChangeSet со встроенными объектами TodoItem в полях Entity и OriginalEntity.

Кто-нибудь смог заставить JSON.Net десериализовать это должным образом?

8
задан tpeczek 5 September 2012 в 07:16
поделиться