在使用 MVC 4 的新单页应用程序工具时,我注意到我发现的所有示例都没有包含通过 WebApi 更新回 DateTime 的示例。我很快就发现了原因。
我首先从提供的模板生成标准 SPA。然后我打开 TodoItem.cs 并添加了一个 DateTime 字段。然后我按照评论的指示生成了控制器。(没有 datetime 字段,一切正常)。
生成所有内容后,我启动了应用程序并导航到控制器索引(我将控制器称为“任务”)。我按预期得到了包含 0 条记录的网格页面,然后单击了添加按钮。我按预期被带到编辑页面,并在我闪亮的新日期时间字段中输入了一些数据,包括日期。然后点击保存。
产生了一个错误,说:
服务器错误:HTTP 状态代码:500,消息:反序列化 System.Web.Http.Data.ChangeSetEntry[] 类型的对象时出错。DateTime 内容 '01/01/2012' 不是 JSON 所要求的以 '/Date(' 开头并以 ')/' 结尾。
该工具似乎还不支持 DateTime。我确信我可以通过并花一些时间来解决它并让它工作,但我想我可能会在这里找到一些已经解决这个问题并且可以提供见解的人的运气。
有人已经为此战斗了吗?
更新:我正在添加更多信息,因为我提出了这个问题。我尝试使用 JSON.Net 作为我的格式化程序,如下所示。我认为这将是最终的解决方案,但是,仅仅按照下面推荐的海报做是不够的。
使用 JSON.Net 序列化程序时,出现以下错误:
此 DataController 不支持实体“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 对象,并在 Entity 和 OriginalEntity 字段中嵌入 TodoItem 对象。
有没有人让 JSON.Net 正确反序列化这个?