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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340