在使用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 回调函数了。
分享到:
相关推荐
此外,WCF还支持RESTful风格的服务,通过简单的HTTP方法(GET、POST、PUT、DELETE)和JSON数据格式,可以方便地被JavaScript或其他语言的客户端调用。 **安全性** 在WCF服务中,安全性是非常重要的一个方面。可以...
标题中的“WCF服务-分布式事务、自定义对象传递、基础使用示例”揭示了本主题涵盖的关键知识点,包括Windows Communication Foundation (WCF)服务的三个方面:分布式事务处理、自定义对象传递以及基础使用示例。WCF...
- **故障排查**:学会使用WCF诊断工具,如服务日志、消息跟踪、性能计数器等,以便于定位和解决问题。 总结,"Rab.WcfSample.rar_wcfiis_wcfiis示例下载"提供的资源对于理解和实践WCF在IIS环境下的工作原理及其...
Newtonsoft.Json 提供了一系列方便的 API,如 `JsonConvert` 类,用于序列化和反序列化对象,以及 `JObject`、`JArray` 等 `Json.Linq` 类型,用于处理 JSON 格式的动态数据。例如: - `JsonConvert....
标题中的“wcf.rar_wcf_wcf C#”暗示了这是一个关于Windows Communication Foundation(WCF)的项目,其中包含了C#语言的实现。WCF是微软.NET Framework的一部分,用于构建可互操作的分布式系统,允许服务提供者和...
2. **WCFServiceHost**: 这部分可能是WCF服务的自承载实现。在WCF中,服务可以通过自承载(如使用`ServiceHost`类)或外部宿主(如IIS)来启动。自承载允许开发者独立于Web服务器运行服务,便于开发和调试。`...
2. **反序列化**:将 JSON 数据解析成对应的 .NET 对象,用于应用程序内部处理。 3. **动态 JSON**:通过 `JObject`、`JArray` 等动态类型,可以方便地操作 JSON 数据而无需预先定义数据模型。 4. **LINQ to JSON**...
10. **持久性和可靠性**:通过消息队列(MSMQ)和交易(Transaction)支持,WCF可以确保消息传递的可靠性和数据一致性。 通过“Wcf.App”案例,学习者将有机会亲手实践这些概念,并理解如何在实际项目中应用它们。...
4. **wcf8学习之数据传输.doc**:WCF提供了多种数据序列化机制,用于在服务和客户端之间传递数据。此文档可能涵盖XML、Binary、Data Contract等不同方式。 5. **wcf3学习之消息交换.doc**:WCF支持多种消息交换模式...
当我们需要在WCF服务中返回JSON(JavaScript Object Notation)格式的数据时,主要是为了满足现代Web应用程序的需求,因为JSON是一种轻量级、易于读写的数据交换格式,常用于Ajax通信。 要创建一个返回JSON格式数据...
SvcUtil.exe,WCF工具。WCF命令行。
本文将深入探讨如何在Android客户端和WCF服务之间有效地传递复杂对象。 首先,让我们理解一下“复杂对象”这个词。在编程中,复杂对象通常指的是包含多个属性或者嵌套对象的数据结构。例如,一个用户对象可能包含...
WCF提供了丰富的功能,包括安全性、事务、消息队列、路由服务等,支持多种通信协议(如HTTP、TCP、MSMQ)和数据格式(如XML、SOAP、JSON)。 二、服务契约 服务契约定义了服务提供的操作和消息交换模式。它由接口...
NetCFSvcUtil.exe——WCF工具,WCF命令行。FOR Windows Mobile
本文将深入探讨如何使用JSON(JavaScript Object Notation)作为数据交换格式,实现在Android客户端和WCF服务之间的有效通信。 首先,让我们了解JSON。JSON是一种轻量级的数据交换格式,易于人阅读和编写,同时也...
3. **可靠消息传递**: 支持消息队列(MSMQ)和持久性通道,确保消息在不可靠的网络环境下也能正确传递。 4. **事务处理**: 集成.NET事务管理,支持分布式事务,保证业务操作的一致性。 5. **服务质量(QoS)**: 可...
此扩展增加了对WCF服务和行为的依赖项注入的支持。 有3个Ninject ServiceHostFactory可以在和。 Ninject.Extensions.Wcf.NinjectServiceHostFactory用于普通服务 Ninject.Extensions.Wcf....
12. **调试和诊断**:WCF提供了丰富的工具和API,如WCF Trace Viewer、Message Logging和Service Debugging,帮助开发者诊断和调试服务问题。 通过深入学习《Wrox Professional WCF 4》,读者不仅可以掌握WCF的基础...
11.再谈WCF的双向通讯-基于Http的双向通讯 V.S. 基于TCP的双向通讯