我有一个控制器操作,它实际上只是返回模型的JsonResult.因此,在我的方法中,我有如下内容:
return new JsonResult(myModel);
这很好用,除了一个问题.模型中有一个Date属性,该属性似乎在Json结果中返回,如下所示:
"\/Date(1239018869048)\/"
我应该如何处理日期,以便它们以我需要的格式返回?或者我如何在脚本中处理上面的格式?
我有一个控制器操作,它实际上只是返回模型的JsonResult.因此,在我的方法中,我有如下内容:
return new JsonResult(myModel);
这很好用,除了一个问题.模型中有一个Date属性,该属性似乎在Json结果中返回,如下所示:
"\/Date(1239018869048)\/"
我应该如何处理日期,以便它们以我需要的格式返回?或者我如何在脚本中处理上面的格式?
仅仅是扩展到casperOne's answer.
JSON spec不包括日期值.MS必须进行调用,他们 Select 的路径是利用字符串的javascript表示中的一个小技巧:字符串文本"/"与"\/"相同,字符串文本将被序列化为"\/"(甚至"\/"必须映射为"\\/").
有关更好的解释,请参见http://msdn.microsoft.com/en-us/library/bb299886.aspx#intro_to_json_topic2(向下滚动到"从JavaScript文字到JSON")
JSON的一个痛点是 缺少日期/时间文字.许多 人们感到惊讶和失望 当他们第一次学到这一点的时候 遇到JSON.简单的解释 (安慰或不安慰)缺席 日期/时间文字是JavaScript 也从来没有过:支持 JavaScript中的日期和时间值为 完全通过日期提供 对象.大多数使用JSON的应用程序 因此,作为一种数据格式,通常 倾向于使用字符串或 表示日期和时间的数字 价值.如果使用字符串,则可以 通常期望它在ISO中 8601格式.如果使用数字, 取而代之的是,该值通常为 被认为是指……的数量 以通用坐标为单位的毫秒 纪元以来的时间(UTC),其中纪元是 定义为1970年1月1日午夜 (UTC).再说一次,这只是一个 约定,而不是JSON的一部分 标准的.如果您要交换数据 使用另一个应用程序,您将 需要查看其文档以查看 它如何编码日期和时间值 在JSON文字中.例如, 微软的ASP.NET AJAX既不使用也不使用 所描述的惯例的一部分.相反, 它将.NET日期时间值编码为 JSON字符串,其中 字符串为/日期(刻度)/以及其中 TICKS表示从 纪元(UTC).所以1989年11月29日, 上午4:55:30,UTC编码为 "\/日期(628318530718)\/".
一个解决方案就是把它解析出来:
value = new Date(parseInt(value.replace("/Date(", "").replace(")/",""), 10));
不过,我听说有一个设置可以让序列化程序输出DateTime
个new Date(xxx)
语法的对象.我会试着把它挖出来.
第二个参数JSON.parse()
接受一个reviver
函数,其中规定了在返回之前,最初产生的值是如何产生的.
以下是日期的示例:
var parsed = JSON.parse(data, function(key, value) {
if (typeof value === 'string') {
var d = /\/Date\((\d*)\)\//.exec(value);
return (d) ? new Date(+d[1]) : value;
}
return value;
});
见JSON.parse()人的文件