Играя с новым инструментарием одностраничных приложений 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 десериализовать это должным образом?