【发布时间】:2016-11-04 21:16:54
【问题描述】:
我在 Angular 控制器中成功调用了 $http.get 并取回了一个大的 json 对象。像这样:
var self=this;
self.createNewStatusReport = function()
{
$http.get(self.NewStatusReportUrl).then(function(response)
{
self.AngularModel.StatusReportJsons.push(response.data);
});
};
返回的 json 包含许多日期。不幸的是,格式如下所示:/Date(1420099200000)/。这是响应数据的简化部分:
{
"StatusReportID": 25,
"DueDate": "/Date(1468566000000)/",
"SubmitDate": null,
"WorkStatement": [
{
"WorkStatementID": 41,
"Milestone": [
{
"MilestoneID": 501,
"ContractorComments": null,
"Title": "Do some specific piece of work",
"StartDate": "/Date(1459494000000)/",
"EndDate": "/Date(1469948400000)/",
"IsCompleted": false,
...
我对服务器端也有(一些)控制权,但不能从 DateTime 更改 StatusReportJson 中的日期类型?串起来。它是用 C# 编写的 MVC:
[HttpGet]
public JsonResult NewStatusReport(string agreementNumber)
{
var statusReport = StatusReports.GetStatusReport(25);
return Json(new StatusReportJson(statusReport), JsonRequestBehavior.AllowGet);
}
有没有一种简单的方法可以将这些日期字符串递归地转换为日期对象?我已经解析了响应数据;我可以插入自己的解析步骤吗?在服务器端,我可以在不修改我的 StatusReportJson 对象的数据类型的情况下将日期作为看起来更像“2016-04-01T00:00:00”或简单的“2016-04-01”的日期字符串输入吗?其他人已经在这里解决了转换问题:How do I format a Microsoft JSON date? 我需要帮助构建解决方案的位置,以便在我的情况下有效。感谢您的帮助!
【问题讨论】:
-
简单地循环数据并在推送到数组之前转换每个实例。必须进行客户端数据转换并不少见
-
这会产生我宁愿没有的依赖关系。如果 StatusReportJson 在服务器端发生变化,这很可能会发生,我不想更改客户端以匹配。使代码的可维护性降低。
-
我不知道如何在服务器端进行更改。但在客户端,您可以只使用将 /Date()/ 字符串转换为数字的过滤器,然后将该数字传递给标准日期过滤器。
-
“使代码不易维护” ...没有意义。
-
有趣的想法。您是在谈论 Angular 过滤器吗? (我对它们还不是很熟悉。)假设我可以查找如何编写一个,那么在解析 json 之前,我将如何将它放在此处工作?