使用ASP.NET一般处理程序或WebService返回JSON的实现代码

示例代码下载: http://zsharedcode.googlecode.com/files/JQueryElementDemo.rar

本文中所包含的内容如下:

* 准备
  * 一般处理程序/ashx
  * WebService/asmx准备

如果希望通过 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 = new SortedDictionary<string, object> ( );
values.Add ( "message",
string.IsNullOrEmpty ( name ) ? "无名氏" :
string.Format ( "你好 {0}, {1}", name, 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.

(0)

相关推荐

  • .NET C#创建WebService服务简单实例

    Web service是一个基于可编程的web的应用程序,用于开发分布式的互操作的应用程序,也是一种web服务 WebService的特性有以下几点: 1.使用XML(标准通用标记语言)来作为数据交互的格式. 2.跨平台性,因为使用XML所以只要本地应用可以连接网络解析XML就可以实现数据交换,比如安卓.IOS.WindowsPhone等都可以实现对Web service的数据交互. 3.基于HTTP协议,直接跨越防火墙,通用型强: 下面使用Visual Studio 2013(其他VS版本亦是

  • C#动态webservice调用接口

    C#动态webservice调用接口 using System; using System.Collections; using System.IO; using System.Net; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Hishop.Plugins { /// <summary> /// 利用WebRequest/WebResponse进行WebService调用的类

  • c#动态调用Webservice的两种方法实例

    方法一: 复制代码 代码如下: Hashtable ht = new Hashtable();            ht.Add("a", "testhelloworld");            XmlDocument xx = WebServicesHelper.QuerySoapWebService("http://www.jb51.net/elab_mgmt/WorkflowSchemeTaskSerivce.asmx", "

  • C#发送HttpPost请求来调用WebService的方法

    复制代码 代码如下: void UpdateContactSign()        {           string ServerPage ="http://localhost/WebService/MyService.asmx";            try            {                //ServerPage += "?op=TangramAction";                ServerPage += "

  • c#动态改变webservice的url访问地址

    1.添加一个App.config配置文件. 2.配置服务http://Lenovo-PC:80/EvisaWS/WharfService?wsdl,那么在上面的文件中就会自动生成服务的配置: 复制代码 代码如下: <?xml version="1.0" encoding="utf-8" ?><configuration>    <system.serviceModel>        <bindings>       

  • .net实现webservice简单实例分享

    原理:WebService是一个SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过Internet进行基于Http协议的网络应用间的交互.作用:主要用于数据交换.提供服务接口优点:可跨平台.部署简单调用方便.无需额外客户端支持 一.创建一个WebService服务1.创建一个普通的Asp.Net Web应用程序,名称为WebServiceDemo 2.在刚创建的web程序里添加一个WebService服务文件,名称为TestService.asm

  • C# .Net动态调用webService实现思路及代码

    复制代码 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Net; using System.IO; using System.Web.Services.Description; using System.CodeDom; using Microsoft.CSharp; using System.CodeDom.Compiler; usi

  • c# JSON返回格式的WEB SERVICE

    我贴c#的代码: 复制代码 代码如下: namespace IWebs.Webs{ using System; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml; using System.Xml.XPath; using System.Web.Script.Services; using IWebs; [WebService (Name="cjjer",Descriptio

  • asp.net(c#)动态修改webservice的地址和端口(动态修改配置文件)

    这个问题其实并没有我想像的那个复杂,我们都知道怎么直接修改吧,那就是修改WebConfig文件的配置节具体的方法看下面图片 这个相信很多人都知道,直接修改就行了动态修改方式----------------------------------------------------------那么怎么动态修改呢?我想可能很多人都会这样讲,修改WebConfig文件,有专用的帮助类,也可以自己写因为WebConfig是可以Xml的形来编辑的,对的这种方法确实是可行的那么我告诉你们,你们错了,有更简单而且

  • 使用ASP.NET一般处理程序或WebService返回JSON的实现代码

    示例代码下载: http://zsharedcode.googlecode.com/files/JQueryElementDemo.rar 本文中所包含的内容如下: * 准备  * 一般处理程序/ashx  * WebService/asmx准备 如果希望通过 ashx 或者 asmx 来返回 JSON, 那么需要引用程序集 System.Web.Extensions.dll, 在 .NET 3.5, 4.0 中已经默认包含. 对于 .NET 2.0, 3.0, 需要安装 ASP.NET 2.0

  • jQuery调用WebService返回JSON数据及参数设置注意问题

    .NET Framework 3.5的发布解决了WebService调用中json问题,本文将介绍jQuery调用基于.NET Framework 3.5的WebService返回JSON数据,另外还要介绍一下用jQuery调用WebService的参数设置及设置不当所出现的问题,还有出现问题的原因 jQuery调用WebService网上的介绍也比较多,最近的项目中我也用到不少,一直都很少用.NET Ajax,比较钟情于jQuery调用请求WebService有几种方法,这主要说一下POST与

  • asp.net webservice返回json的方法

    webservice默认的返回为XML 要返回json可以用json工具类把对象转为json字符串,再输出 复制代码 代码如下: [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行. // [System.Web.Script.

  • 排除JQuery通过HttpGet调用WebService返回Json时“parserror”错误

    JQuery大家都经常用,以前用的时候没有注意什么.最近本人在使用JQuery通过HttpGet方式调用WebService时,却发现服务端并非如人所愿返回json数据,而是返回错误提示:parserror. 如今问题被顺利解决,下面是解决过程 首先看客户端使用JQuery调用WebService的代码: 复制代码 代码如下: getHellobyAjax: function(callabckFun) { $.ajax({ type: "GET", url: "WebServ

  • ajax后台处理返回json值示例代码

    复制代码 代码如下: public ActionForward xsearch(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { String parentId = request.getParameter("parentId"); String supplier = request.getParamet

  • Struts2返回json格式数据代码实例

    最近由于工作原因,没时间更新,开始吧~~ 关于json的返回需要用到一个工具包来将书转换为json格式,在此用到的jar包为: import net.sf.json.JSONArray; //将数据转换为JSON数组  import net.sf.json.JSONObject; //将数据转换为JSON对象 dao层的代码 public class ProInfomaDao extends HibernateDaoSupport { private Logger logger = Logger

  • php json_encode()函数返回json数据实例代码

    json_encode()函数用法. echo json_encode(array('a'=>'bbbb','c'=>'ddddd'); 这样就会生成一个标准的json格式的数据 代码如下 <?php //需要执行的SQL语句 //单条 $sql="select id,name from tbl_user where id=1"; //多条数据 //$sql="select id,name from tbl_user"; //调用conn.php文

  • ASP.NET使用Ajax返回Json对象的方法

    一.新建一个html页面,如注册页面"Register.htm" <!DOCTYPE html> <html > <head> <title>用户注册</title> <meta charset="utf-8" /> <style type="text/css"> .msg { color:Red; } </style> </head> &

  • 用Jquery访问WebService并返回Json的代码第1/3页

    在我们的应用中一般会是这样的,使用了jquery作为客户端框架,ajax请求也通常返回html或者json.html这里就不讨论了.返回json一般都是搞一个handler.ashx来处理请求,拼凑字符串来返回json.从而放弃了ws,因为ws返回的是xml,使用起来不方便. 所以我觉着比较完美的解决方法是让ws返回json而且不用asp.net ajax的客户端框是比较理想的解决方法. 通过观测发现asp.net ajax的客户端框架请求webservice的时候返回的是json,为什么web

  • 异步调用webservice返回responseXML为空的问题解决方法

    先总结几个要领: 1)要熟悉javascript对XML文件的加载与操作: DOM的XML操作可参考的示例:http://www.w3school.com.cn/xmldom/met_document_getelementsbytagname.asp 2)在IE下面还是要通过loadXML来转responseText: 3)xml加载后异步属性设置: 4)命名空间处理等问题: 下面上代码: ========ASPX前台代码======== 复制代码 代码如下: <%@ Page Language

随机推荐