一尘不染

ASP.NET MVC JsonResult日期格式

javascript

我有一个控制器操作,可以有效地简单返回模型的JsonResult。因此,在我的方法中,我有以下内容:

return new JsonResult(myModel);

除一个问题外,此方法效果很好。模型中有一个date属性,它似乎在Json结果中返回,如下所示:

"\/Date(1239018869048)\/"

我应该如何处理日期,以便以所需的格式返回日期?或者如何在脚本中处理上面的这种格式?


阅读 905

收藏
2020-04-25

共1个答案

一尘不染

只是为了扩展casperOne的答案。

JSON规范并不考虑日期值。MS必须打个电话,他们选择的路径是利用字符串的javascript表示形式的一个小技巧:字符串文字“/”与“ \ /”相同,并且字符串文字 永远不会 序列化为“ \ /”(即使“ \ /”也必须映射到“ \\ /”)。

JSON的痛处之一是缺少日期/时间文字。许多人在初次遇到JSON时会感到惊讶和失望。对于缺少日期/时间文字的简单解释(是否可以安慰)是JavaScript从未使用过:在JavaScript中对日期和时间值的支持完全通过Date对象提供。因此,大多数使用JSON作为数据格式的应用程序通常倾向于使用字符串或数字来表示日期和时间值。如果使用字符串,通常可以期望它采用ISO
8601格式。如果改用数字,则该值通常是指自纪元以来的世界标准时间(UTC)的毫秒数,其中纪元定义为1970年1月1日午夜(UTC)。再次,这仅是约定,并非JSON标准的一部分。如果要与另一个应用程序交换数据,则需要检查其文档以查看其如何在JSON文字中编码日期和时间值。例如,Microsoft的ASP.NET
AJAX都不使用所描述的约定。而是将.NET DateTime值编码为JSON字符串,其中字符串的内容为/
Date(ticks)/,而ticks表示自历元(UTC)以来的毫秒数。因此,1989年11月29日上午4:55:30,以UTC编码为“ \ /
Date(628318530718)\ /”。NET AJAX均不使用所描述的约定。而是将.NET
DateTime值编码为JSON字符串,其中字符串的内容为/
Date(ticks)/,而ticks表示自历元(UTC)以来的毫秒数。因此,1989年11月29日上午4:55:30,以UTC编码为“ \ /
Date(628318530718)\ /”。NET AJAX均不使用所描述的约定。而是将.NET
DateTime值编码为JSON字符串,其中字符串的内容为/
Date(ticks)/,而ticks表示自历元(UTC)以来的毫秒数。因此,1989年11月29日上午4:55:30,以UTC编码为“ \ /
Date(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;
});
2020-04-25