繁体   English   中英

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

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

这里有一些帖子,但不是这个具体问题的答案。

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

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

从之前的帖子中可以看出这可以使用REGEX完成,但REGEX和我是老对手,在酒吧里冷冷地凝视着对方。

这是唯一的方法吗? 如果是这样,有人可以指向我适合此任务的REGEX参考吗?

问候,

圭多

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

这是一个快速的功能,可以满足您的需求。 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"时,您可能会遇到问题dataType: "json"会自动调用原始解析器。 如果使用此设置,则必须覆盖jQuery的现有功能。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM