【发布时间】:2012-02-27 22:56:16
【问题描述】:
在使用 MVC 4 的新单页应用程序工具时,我注意到我发现的所有示例都没有包含通过 WebApi 更新回 DateTime 的示例。我很快就发现了原因。
我首先从提供的模板生成标准 SPA。然后我打开 TodoItem.cs 并添加了一个 DateTime 字段。然后我按照 cmets 的指示生成了控制器。 (没有 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 正确反序列化这个?
【问题讨论】:
-
显示一些允许重现您的问题的代码真的很有帮助。
-
不幸的是,我需要提供整个解决方案。提供的单页应用程序模板会生成大量代码。要重现该错误,只需创建一个新的 MVC 4 单页应用程序。工具完成后,打开 TodoItem.cs 并添加一个日期时间字段。然后右键单击“控制器”并添加一个控制器。为其选择一个名称,选择 TodoItem 作为您的模型,SPA 模板并让它创建一个新的上下文。完成后,运行应用程序并导航到新控制器。点击添加并输入数据,然后点击保存。
标签: datetime asp.net-mvc-4 asp.net-web-api asp.net-spa