`

json2.js和wcf传递Date对象问题

    博客分类:
  • json
阅读更多
在使用jquery和wcf通信的时候,遇到了通过json传递Date对象的问题.通过观察发现wcf返回到浏览器中的json字符串 是 "\/Date(1231231323+0800)\/" 形式。前面的数字1231231323是GMT 时区中自1970 年1 月1 日午夜以来按正常时间(非夏令时)经过的毫秒数.



所以可以取出该数字得到Date对象



var dateStr =  "\/Date(1231231323+0800)\/";


var date =new Date(parseInt( dataStr.substring(6,dataStr.length-2) ));
当然要想把客户端的Date对象通过json字符串传递给wcf也必须把Date对象格式化成 "\/Date(1231231323+0800)\/"形式的字符串

var date =new Date();
var dateStr = "\/Date("+date.getTime()+"+0800)\/"



我使用的json2.js中的JSON.stringify和JSON.parse来完成js对象和json字符串之间转换的。但是这两个方法默认的转换是按照ISO strings形式转换的



查看json2.js可以发现下面代码段

       Date.prototype.toJSON = function (key) {

            return this.getUTCFullYear()   + '-' +
                 f(this.getUTCMonth() + 1) + '-' +
                 f(this.getUTCDate())      + 'T' +
                 f(this.getUTCHours())     + ':' +
                 f(this.getUTCMinutes())   + ':' +
                 f(this.getUTCSeconds())   + 'Z';
        };
所以大家如果只需要个wcf通信的话可以把这个方法修改下返回wcf形式的字符串,这样直接调用JSON.stringify(data)

就ok了,不用再特别处理时间对象了。




   
    Date.prototype.toJSON = function(key) {
            return "\/Date(" + this.getTime() + "+0800)\/";
        };


现在看下如何让JSON.parse方法也自动处理好服务器端返回的json时间字符串,我们知道JSON.parse方法第二个参数是一个回调函数,可以用来遍历处理wcf返回json对象的属性。所以我们可以这样来解析wcf返回的json字符串


JSON.parse(data,function(key, value) {
        if (typeof value == "string" && value.indexOf("\/Date(") == 0) {
            var s = value.substring(6, value.length - 2);
            return new Date(parseInt(s));
        }
            return value;
    })
这里判断value是时间的字符串不是很严格,大家可以自己修改下。

但是这样每次调用都传入该函数也挺烦人的,反正我只和wcf通信,于是也可以修改json2.js

找到下面的代码段


   
  JSON.parse = function (text, reviver) {

// The parse method takes a text and an optional reviver function, and returns
// a JavaScript value if the text is a valid JSON text.

            var j;

            
}


然后再parse方法的前面加上下面代码



 JSON.parse = function(text, reviver) {
            // 修改×××××××××××××××××××××××××××
            if (reviver == undefined) {
                reviver = function(key, value) {
                    if (typeof value == "string" && value.indexOf("\/Date(") == 0) {
                        var s = value.substring(6, value.length - 2);
                        return new Date(parseInt(s));
                    }
                    return value;
                }
            }  // 修改×××××××××××××××××××××××××××


            // The parse method takes a text and an optional reviver function, and returns
            // a JavaScript value if the text is a valid JSON text.

            var j;

}

这样当我们就不需要每次传入第二个参数reviver 回调函数了。
分享到:
评论
1 楼 whiletrue 2010-06-08  
text = JSON.stringify([new Date()], function (key, value) {
                return this[key] instanceof Date ?
                    'Date(' + this[key] + ')' : value;
            });

相关推荐

    WCFService.zip_WCF.Service_wcf

    此外,WCF还支持RESTful风格的服务,通过简单的HTTP方法(GET、POST、PUT、DELETE)和JSON数据格式,可以方便地被JavaScript或其他语言的客户端调用。 **安全性** 在WCF服务中,安全性是非常重要的一个方面。可以...

    6月22日PM WCF服务-分布式事务、自定义对象传递、基础使用示例.rar

    标题中的“WCF服务-分布式事务、自定义对象传递、基础使用示例”揭示了本主题涵盖的关键知识点,包括Windows Communication Foundation (WCF)服务的三个方面:分布式事务处理、自定义对象传递以及基础使用示例。WCF...

    Rab.WcfSample.rar_wcfiis_wcfiis示例下载

    - **故障排查**:学会使用WCF诊断工具,如服务日志、消息跟踪、性能计数器等,以便于定位和解决问题。 总结,"Rab.WcfSample.rar_wcfiis_wcfiis示例下载"提供的资源对于理解和实践WCF在IIS环境下的工作原理及其...

    Newtonsoft.Json .net framework 3.5 和.net framework 4.0两个版本

    Newtonsoft.Json 提供了一系列方便的 API,如 `JsonConvert` 类,用于序列化和反序列化对象,以及 `JObject`、`JArray` 等 `Json.Linq` 类型,用于处理 JSON 格式的动态数据。例如: - `JsonConvert....

    wcf.rar_wcf_wcf C#

    标题中的“wcf.rar_wcf_wcf C#”暗示了这是一个关于Windows Communication Foundation(WCF)的项目,其中包含了C#语言的实现。WCF是微软.NET Framework的一部分,用于构建可互操作的分布式系统,允许服务提供者和...

    WCF.rar_wcf_whalewpf

    2. **WCFServiceHost**: 这部分可能是WCF服务的自承载实现。在WCF中,服务可以通过自承载(如使用`ServiceHost`类)或外部宿主(如IIS)来启动。自承载允许开发者独立于Web服务器运行服务,便于开发和调试。`...

    Json80r2.zip

    2. **反序列化**:将 JSON 数据解析成对应的 .NET 对象,用于应用程序内部处理。 3. **动态 JSON**:通过 `JObject`、`JArray` 等动态类型,可以方便地操作 JSON 数据而无需预先定义数据模型。 4. **LINQ to JSON**...

    Wcf.App.zip_wcf

    10. **持久性和可靠性**:通过消息队列(MSMQ)和交易(Transaction)支持,WCF可以确保消息传递的可靠性和数据一致性。 通过“Wcf.App”案例,学习者将有机会亲手实践这些概念,并理解如何在实际项目中应用它们。...

    wcf.rar_chatroom wcf_it_wcf

    4. **wcf8学习之数据传输.doc**:WCF提供了多种数据序列化机制,用于在服务和客户端之间传递数据。此文档可能涵盖XML、Binary、Data Contract等不同方式。 5. **wcf3学习之消息交换.doc**:WCF支持多种消息交换模式...

    WCF 返回json 格式

    当我们需要在WCF服务中返回JSON(JavaScript Object Notation)格式的数据时,主要是为了满足现代Web应用程序的需求,因为JSON是一种轻量级、易于读写的数据交换格式,常用于Ajax通信。 要创建一个返回JSON格式数据...

    SvcUtil.exe——WCF工具

    SvcUtil.exe,WCF工具。WCF命令行。

    安卓与wcf通信传递复杂对象

    本文将深入探讨如何在Android客户端和WCF服务之间有效地传递复杂对象。 首先,让我们理解一下“复杂对象”这个词。在编程中,复杂对象通常指的是包含多个属性或者嵌套对象的数据结构。例如,一个用户对象可能包含...

    Wrox.Professional.WCF.4.Windows.Communication.Foundation.with.NET.4.

    WCF提供了丰富的功能,包括安全性、事务、消息队列、路由服务等,支持多种通信协议(如HTTP、TCP、MSMQ)和数据格式(如XML、SOAP、JSON)。 二、服务契约 服务契约定义了服务提供的操作和消息交换模式。它由接口...

    NetCFSvcUtil.exe——WCF工具

    NetCFSvcUtil.exe——WCF工具,WCF命令行。FOR Windows Mobile

    安卓与wcf通信 json实现

    本文将深入探讨如何使用JSON(JavaScript Object Notation)作为数据交换格式,实现在Android客户端和WCF服务之间的有效通信。 首先,让我们了解JSON。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也...

    WCF.rar_wcf_wcf 框架

    3. **可靠消息传递**: 支持消息队列(MSMQ)和持久性通道,确保消息在不可靠的网络环境下也能正确传递。 4. **事务处理**: 集成.NET事务管理,支持分布式事务,保证业务操作的一致性。 5. **服务质量(QoS)**: 可...

    Ninject.Extensions.Wcf:Ninject WCF扩展

    此扩展增加了对WCF服务和行为的依赖项注入的支持。 有3个Ninject ServiceHostFactory可以在和。 Ninject.Extensions.Wcf.NinjectServiceHostFactory用于普通服务 Ninject.Extensions.Wcf....

    Wrox.Professional.WCF.4.Windows.Communication.Foundation.with.NET.4

    12. **调试和诊断**:WCF提供了丰富的工具和API,如WCF Trace Viewer、Message Logging和Service Debugging,帮助开发者诊断和调试服务问题。 通过深入学习《Wrox Professional WCF 4》,读者不仅可以掌握WCF的基础...

    11.再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯

    11.再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯

Global site tag (gtag.js) - Google Analytics