asp.net WebService 返回 JSON操作方法

请看下面的 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 或者是源代码

时间: 2024-10-01 22:02:21

asp.net WebService 返回 JSON操作方法的相关文章

asp.net webservice返回json的方法

 webservice默认的返回为XML 要返回json可以用json工具类把对象转为json字符串,需要的朋友可以参考下 webservice默认的返回为XML 要返回json可以用json工具类把对象转为json字符串,再输出   代码如下: [WebService(Namespace = "http://tempuri.org/")]  [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]  // 若要允许使用

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.

asp.net webservice 返回json数据乱码解决方法

[WebMethod] public void QueryRiskNotice(string phone) { try { var data = _riskNoticeDal.QueryRiskNotice(phone); var list = from da in data.AsEnumerable() select new { //通知单 编号 number = da.Field<string>("t_number"), //通知单 日期 date = da.Field

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与

webservice 返回json多出一个{&amp;amp;quot;d&amp;amp;quot;:null}

问题描述 webservice返回json多出一个{"d":null},如下{"Response":null,"Code":2,"Message":"工作名称已存在"}{"d":null}后台是这么写的publicvoidReturnMsg(){varresponse=HttpContext.Current.Response;response.ContentType="appl

jquery的ajax调用Webservice返回Json数组

本文章是利用jquery的ajax调用webservice返回json数组哦,json数据是网页特效的一种小型轻型数据,实时交互性更强于xml哦. json数据 {'employee':[{'name':'john','sex':'man','age':'25'},{'name':'tom','sex':'man','age':'21'},{'name':'mary','sex':'woman','age':'21'}]}     //jquery 调用webservice导入数据       

使用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

jquery调用基于.NET Framework 3.5的WebService返回JSON数据

jquer调用WebService网上的介绍也比较多,最近的项目中我也用到不少,一直都很少用.net ajax,比较钟情于jquery,调用请求WebService有几种方法,这主要说一下POST与GET方法,其实安全方法考虑不建议使用GET方法,下面就说一下用jquery调用WebService的参数设置及设置不当所出现的问题,还有出现问题的原因.我们这里只讨论返回JSON格式数据的情况,相信大家都比较了解JSON格式的数据对于ajax的方便,不了解的童鞋可以从网上找一下这方面的资料来看一下,

排除JQuery通过HttpGet调用WebService返回Json时“parserror”错误_实用技巧

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