用Javascript/JQuery解析自动生成的.net日期对象

Parsing a Auto-Generated .NET Date Object with Javascript/JQuery

本文关键字:net 日期 对象 自动生成 Javascript JQuery      更新时间:2023-09-26

有一些帖子是关于这个问题的,但没有一个答案。

服务器返回这个:"/Date(1304146800000)/"

我不想改变服务器端代码,而是解析包含在。net生成的JSON对象中的日期。这看起来并不难,因为它看起来就在那里。然而,至少在这些论坛中,似乎没有一个快速的解决方案。

从以前的帖子听起来这可以用REGEX完成,但REGEX和我是老敌人,隔着酒吧冷冷地盯着对方。

这是唯一的方法吗?如果是这样,有人能告诉我一个REGEX引用是适合这个任务吗?

问候,

圭多

Robert的链接很好,但我们应该努力在这里回答问题,而不仅仅是发布链接。

这里有一个快速函数可以满足您的需要。http://jsfiddle.net/Aaa6r/

function deserializeDotNetDate(dateStr) {
  var matches = /'/Date'(('d*)')'//.exec(dateStr);
  if(!matches) {
    return null;
  }
  return new Date( parseInt( matches[1] ) );
}
deserializeDotNetDate("/Date(1304146800000)/");

因为你使用的是jQuery,我已经扩展了它的$.parseJSON()功能,所以它能够为你做这个转换自动和透明

它不仅可以转换。net日期,还可以转换ISO日期。所有主流浏览器的原生JSON转换器都支持ISO日期,但它们只能以一种方式工作,因为JSON规范不支持日期数据类型。

阅读我的博客文章中的所有细节(不要在这里复制博客文章的内容,因为它会太多)并获得代码。想法仍然是一样的:改变jQuery的默认$.parseJSON()行为,这样它就可以检测。net和ISO日期,并在解析JSON数据时自动转换它们。这样,您就不必遍历已解析的对象并手动转换日期。

它是如何使用的?

$.parseJSON(yourJSONstring, true);

查看附加变量?这可以确保所有现有代码按预期工作,而无需任何更改。但是,如果您确实提供了附加参数并将其设置为true,它将检测日期并相应地转换它们。

为什么这个解决方案比手动转换更好?(由Juan建议)

  1. 因为您降低了忘记转换对象树中的某些变量的人为因素的风险(对象可以是深的和宽的)
  2. 因为你的代码是在开发中,如果你改变一些服务器端部分,返回JSON给客户端(重命名变量,添加新的,删除现有的等),你必须考虑这些手动转换在客户端。如果你是自动做的,你就不需要思考(或做任何事情)。

我想到的两个最重要的原因。

当重写jQuery功能感觉不对时

当你不想实际覆盖现有的$.parseJSON()功能时,你可以最小限度地改变代码并将扩展名重命名为$.parseJSONwithdates(),然后在解析JSON时始终使用自己的函数。但是,当您将Ajax调用设置为自动调用原始解析器的dataType: "json"时,可能会遇到问题。如果你使用这个设置,你将不得不覆盖jQuery的现有功能。

还好的是,您不需要更改原始的jQuery库代码文件。你把这个扩展放在一个单独的文件中,并按照自己的意愿使用它。有些页面可能使用它,有些页面可能不使用。但明智的做法是在任何地方都使用它,否则你会因为忘记包含扩展而遇到同样的人为因素问题。只需将您的扩展名包含在您可能使用的全局Javascript文件(或母版页/模板)中。