使用ASP.NET一般处理程序或WebService返回JSON的实现代码
示例代码下载: http://zsharedcode.googlecode.com/files/JQueryElementDemo.rar 本文中所包含的内容如下: * 准备 如果希望通过 ashx 或者 asmx 来返回 JSON,那么需要引用程序集 System.Web.Extensions.dll,在 .NET 3.5,4.0 中已经默认包含. 对于 .NET 2.0,3.0,需要安装 ASP.NET 2.0 AJAX,可以在 http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=883 下载. 一般处理程序/ashx 使用一般处理程序返回 JSON,对于不同版本的 .NET 都是类似,请看下面的 handler.ashx 的代码: 复制代码 代码如下: <%@ WebHandler Language="C#" Class="handler" %> using System; using System.Web; using System.Web.Script.Serialization; using System.Collections.Generic; public class handler : IHttpHandler { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/javascript"; context.Response.Cache.SetNoStore ( ); string name = context.Request["name"]; SortedDictionary<string,object> values = new SortedDictionary<string,object>(); values.Add("message", string.IsNullOrEmpty(name) ? "无名氏" : string.Format("你好 {0},{1}",name,DateTime.Now)); context.Response.Write(new JavaScriptSerializer().Serialize(values)); } public bool IsReusable { get { return false; } } } 上面的例子中,通过 JavaScriptSerializer 类的 Serialize 方法,将对象转化为 JSON 对应的字符串. 而转化的对象是 SortedDictionary,会生成 { "message": "你好 x,20xx-xx-xx xx:xx:xx" } 这样类似的字符串. 如果需要返回数组,可以定义 object[] 来转换. 代码中还使用了 context.Response.Cache.SetNoStore ( ); 来让浏览器每次请求 ashx 时都重新访问,而不是使用缓存. 如果使用 jQuery,可以使用下面的函数来接收 JSON: 复制代码 代码如下: function(data){ alert(data.message); } WebService/asmx 在不同版本的 .NET 中,通过 javascript 访问 WebService 并返回 JSON 是略有不同的. 首先,可以分别采用不同的 Web.config 文件.法全部列出,如有需要请参考: .NET 2.0,3.0 Web.config 复制代码 代码如下: <?xml version="1.0"?> <configuration> <system.web> <compilation debug="true"> <assemblies> <add assembly="System.Web.Extensions,Version=1.0.61025.0,Culture=neutral,PublicKeyToken=31BF3856AD364E35"/> </assemblies> </compilation> <pages/> <httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" type="System.Web.Script.Services.ScriptHandlerFactory" validate="false"/> </httpHandlers> </system.web> </configuration> .NET 3.5 Web.config .NET 4.0 Web.config 以上两个版本的 Web.config 可以在示例压缩包中的 Web.3.5.config 和 Web.4.config 中查看. 下面是 webservice.asmx/webservice.cs 的代码: 复制代码 代码如下: <%@ WebService Language="C#" CodeBehind="~/App_Code/webservice.cs" Class="webservice" %> using System; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Web.Script.Services; using System.Web.Script.Serialization; using System.Collections.Generic; [WebService ( Namespace = "http://tempuri.org/" )] [WebServiceBinding ( ConformsTo = WsiProfiles.BasicProfile1_1 )] [ScriptService] public class webservice : System.Web.Services.WebService { [WebMethod] [ScriptMethod] public SortedDictionary<string,object> Save ( string name ) { this.Context.Response.Cache.SetNoStore ( ); SortedDictionary<string,object> ( ); values.Add ( "message", string.IsNullOrEmpty ( name ) ? "无名氏" : string.Format ( "你好 {0},DateTime.Now ) ); return values; } } 为类添加属性 ScriptService,并对类中的方法使用属性 ScriptMethod,可以让 javascript 来调用这些方法. 这里不需要再使用 JavaScriptSerializer 将对象转化为 JSON 字符串,而是直接返回对象即可. 上面的代码中返回了 SortedDictionary,在 .NET 2.0,3.0 中将类似于 { "message": "你好 x,20xx-xx-xx xx:xx:xx" } 的形式,而对于 .NET 3.5,4.0 则是 { "d": { "message": "你好 x,20xx-xx-xx xx:xx:xx" } },因此可以分别在 jQuery 中使用下面的函数来接受 JSON: 复制代码 代码如下: function(data){ alert(data.message); } function(data){ alert(data.d.message); } JQueryElement 是开源共享的代码,可以在 http://code.google.com/p/zsharedcode/wiki/Download 页面下载 dll 或者是源代码. 实际过程演示: http://www.tudou.com/programs/view/rHCYHX9cmcI/,建议全屏观看. 欢迎访问 panzer 开源项目,http://zsharedcode.googlecode.com/,其中包含了 IEBrowser 控制 WebBrowser 执行各种 js 和 jQuery 脚本以及录制功能 和 jQueryUI 的 Asp.net 控件 JQueryElement. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |