如何将其反序列化为JavaScript日期类型形式?
我尝试使用MS AJAX JavaScrioptSerializer,如下所示:
1S"/>

关于c#:反序列化客户端AJAX JSON日期

关于c#:反序列化客户端AJAX JSON日期

Deserializing Client-Side AJAX JSON Dates

给出以下JSON日期表示形式:

1
"\\/Date(1221644506800-0700)\\/"

如何将其反序列化为JavaScript日期类型形式?

我尝试使用MS AJAX JavaScrioptSerializer,如下所示:

1
Sys.Serialization.JavaScriptSerializer.deserialize("\\/Date(1221644506800-0700)\\/")

但是,我得到的只是文字字符串日期。


假设您知道字符串绝对是我更喜欢这样做的日期:

1
 new Date(parseInt(value.replace("/Date(","").replace(")/",""), 10))

致力于ASP.NET Atlas / AJAX的Bertrand LeRoy描述了JavaScriptSerializer DateTime输出的设计,并揭示了神秘的前斜杠和后斜杠的起源。他提出了以下建议:

run a simple search for"\\/Date((\\d+))\\/" and replace with"new Date($1)" before the eval
(but after validation)

我将其实现为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var serializedDateTime ="\\/Date(1271389496563)\\/";
document.writeln("Serialized:" + serializedDateTime +"<br />");

var toDateRe = new RegExp("^/Date\\\\((\\\\d+)\\\\)/$");
function toDate(s) {
    if (!s) {
        return null;
    }
    var constructor = s.replace(toDateRe,"new Date($1)");
    if (constructor == s) {
        throw 'Invalid serialized DateTime value:"' + s + '"';
    }
    return eval(constructor);
}

document.writeln("Deserialized:" + toDate(serializedDateTime) +"<br />");

这与许多其他答案非常接近:

  • 像Sjoerd Visscher一样使用固定的RegEx-不要忘记^和$。
  • 避免在RegEx上使用string.replace和'g'或'i'选项。" / Date(1271389496563)// Date(1271389496563)/"根本不起作用。

JSON值是字符串,数字,对象,数组,true,false或null。所以这只是一个字符串。没有官方的方式来表示JSON中的日期。此语法来自asp.net ajax实现。其他人则使用ISO 8601格式。

您可以这样解析:

1
2
3
4
5
var s ="\\/Date(1221644506800-0700)\\/";
var m = s.match(/^\\/Date\\((\\d+)([-+]\\d\\d)(\\d\\d)\\)\\/$/);
var date = null;
if (m)
  date = new Date(1*m[1] + 3600000*m[2] + 60000*m[3]);

在ASP.net AJAX反序列化方法中使用的正则表达式将查找一个类似于" / Date(1234)/"的字符串(该字符串本身实际上需要包含引号和斜杠)。要获得这样的字符串,您需要转义引号和反斜杠字符,因此用于创建字符串的javascript代码看起来像" " \\\\ / Date(1234)\\\\ / "。

这将起作用。

1
Sys.Serialization.JavaScriptSerializer.deserialize(""\\\\/Date(1221644506800)\\\\/"")

有点奇怪,但是我发现我必须序列化一个日期,然后序列化从该日期返回的字符串,然后在客户端一次反序列化。

类似这样的东西。

1
2
3
Script.Serialization.JavaScriptSerializer jss = new Script.Serialization.JavaScriptSerializer();
string script = string.Format("alert(Sys.Serialization.JavaScriptSerializer.deserialize({0}));", jss.Serialize(jss.Serialize(DateTime.Now)));
Page.ClientScript.RegisterStartupScript(this.GetType(),"ClientScript", script, true);

对于那些不想使用Microsoft Ajax的人,只需将原型函数添加到字符串类中。

例如

1
2
3
    String.prototype.dateFromJSON = function () {
    return eval(this.replace(/\\/Date\\((\\d+)\\)\\//gi,"new Date($1)"));
};

不想使用eval吗?试试简单的东西,例如

1
var date = new Date(parseInt(jsonDate.substr(6)));

作为旁注,我曾经认为Microsoft通过使用这种格式会产生误导。但是,在定义定义JSON中日期的方式时,JSON规范不是很清楚。


实际上,momentjs支持这种格式,您可以执行以下操作:

1
2
3
    var momentValue = moment(value);

    momentValue.toDate();

这将以javascript日期格式返回值


大数字是标准JS时间

1
new Date(1221644506800)

2008年9月17日星期三19:41:46 GMT 1000(EST)


推荐阅读

    linux命令生成序列?

    linux命令生成序列?,系统,工具,信息,灵活,名称,管理,工作,状态,网络,命令,lin

    linux同步客户端命令?

    linux同步客户端命令?,时间,网络,服务,系统,认证,状态,管理,信息,分析,地址,l

    linux反序列化命令?

    linux反序列化命令?,状态,数据,情况,环境,网络,适当,下来,接口,对象,序列,序

    linux查序列号命令?

    linux查序列号命令?,系统,信息,设备,产品,工具,序列号,银河,代码,硬盘,命令,l

    linux中日期相关命令?

    linux中日期相关命令?,时间,系统,信息,命令,代码,服务,工作,工具,终端,时分,l

    linux设日期时间命令?

    linux设日期时间命令?,时间,系统,命令,国家,环境,数据,电脑,标准,信息,大陆,l

    查看linux类型命令?

    查看linux类型命令?,系统,信息,命令,状态,数据,数字,情况,地址,类型,文件,lin

    linux命令测试客户端?

    linux命令测试客户端?,地址,系统,网络,工具,工作,分析,环境,命令,下行,资料,l

    linux删除类型命令?

    linux删除类型命令?,系统,档案,命令,文件,名称,环境,数据,不了,目录,文件夹,

    linux系统改日期命令?

    linux系统改日期命令?,时间,系统,信息,命令,终端,时分,窗口,操作系统,一下

    linux命令日期修改?

    linux命令日期修改?,时间,系统,电脑,信息,命令,标准,文件,终端,日期,时分,LIN

    查看linux库类型命令?

    查看linux库类型命令?,系统,工作,信息,状态,电脑,命令,工具,代码,地址,发行,

    linux切换日期命令?

    linux切换日期命令?,时间,系统,信息,命令,城市,终端,时分,日期,窗口,操作系

    linux设置日期命令?

    linux设置日期命令?,时间,系统,标准,命令,信息,大陆,国家,日期,时钟,时区,详

    linux网卡类型命令?

    linux网卡类型命令?,网络,系统,地址,信息,设备,状态,服务,名称,名字,网卡,如

    linux修改日期命令?

    linux修改日期命令?,时间,系统,命令,信息,工具,工作,服务,代码,日期,终端,lin

    linux打印日期命令?

    linux打印日期命令?,时间,系统,工作,命令,标准,环境,档案,信息,设备,位置,Lin

    linux查看命令类型用?

    linux查看命令类型用?,信息,系统,情况,命令,实时,工作,设备,电脑,文件,类型,

    linux基本命令日期?

    linux基本命令日期?,时间,系统,命令,管理,工作,网络,工具,基础,标准,环境,详

    linux命令三种类型?

    linux命令三种类型?,工作,地址,系统,标准,时间,管理,命令,目录,信息,文件,lin