使用 ASP.NET 一般处理程序或 WebService 返回 JSON

摘要:
“匿名”:字符串。格式);context.Response。写入;}publicboolIsReusable{获取{returnfalse;}}}在上面的示例中,通过JavaScript Serializer类的Serialize方法将对象转换为与JSON相对应的字符串。转换后的对象是SortedDictionary,它将生成类似{“message”:“Hello x,20xx-xx-xxxx:xx:xx”}的字符串。如果需要返回数组,可以定义要转换的对象[]。代码还使用上下文。回答隐藏物设置无存储();使浏览器能够在每次请求时重新访问ashx,而不是使用缓存。如果使用jQuery,可以使用以下函数接收JSON:函数{alert;}的不同版本中的WebService/asmx。NET,通过javascript访问WebService和返回JSON略有不同。首先,您可以使用不同的Web。配置文件。如有必要,请参阅:。NET 2.0、3.0 Web。配置˂?

天, 将为大家说明如何在 ASP.NET 中使用一般处理程序或者 WebServicejavascript 返回 JSON.

本文更新:

2011-12-9: 增加 -:data 的说明.

由于精力有限, 不能在多个博客中保证文章的同步, 可在如下地址查看最新内容, 请谅解:

http://code.google.com/p/zsharedcode/wiki/AjaxReturnJSON

请到 Download 下载资源 的 JQueryElement 示例下载一节下载示例代码

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

*准备
*一般处理程序/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/, 建议全屏观看.

免责声明:文章转载自《使用 ASP.NET 一般处理程序或 WebService 返回 JSON》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇记录下centos下 ffmpeg项目编译参数ASP.NET Core SignalR (九):SignalR .NET 客户端下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

HTTP metadata数据

信息元位置 信息元名称 信息元ID 信息元描述 1 MetadataVersion 5000 Metadata版本号 当前版本号为1.0 2 MetadataID 1019 MetadataID 3 sourceIPv4Address or sourceIPv6Address 8 or 27 源IP(IPv4或者IPv6)...

关于linux下system()函数的总结

导读 曾经的曾经,被system()函数折磨过,之所以这样,是因为对system()函数了解不够深入。这里必须要搞懂system()函数,因为有时你不得不面对它。 先来看一下system()函数的简单介绍: #include int system(const char *command) system()函数调用/bin/sh来执行参数指定的命令,/...

ASP.NET Core 认证与授权[1]:初识认证 (笔记)

原文链接:  https://www.cnblogs.com/RainingNight/p/introduce-basic-authentication-in-asp-net-core.html 在ASP.NET 4.X 中,我们最常用的是Forms认证,它既可以用于局域网环境,也可用于互联网环境,有着非常广泛的使用。但是它很难进行扩展,更无法与第三方认证...

使用Advanced Installer制作IIS安装包(二:配置安装包依赖项和自定义dll)

阅读目录 一、配置安装包依赖项 二、自定义dll(测试数据库连接) 三、总结 正文 前言:上篇使用Advanced Installer制作IIS安装包(一:配置IIS和Web.config)介绍了下使用Advanced Installer配置IIS和Web.config的过程,操作起来是相对比较简单的,只要知道了博主提供的方法,相信都不是问题,其实...

iphone上如何绘制柱状图(转载,整理)

曾经在cocoachina上看到过绘制的立体的柱状图,效果非常不错,下面是链接, http://www.cocoachina.com/bbs/read.php?tid-9462-toread-1.html NTChartView.h #import <Foundation/Foundation.h> @interface NTChartV...

NET 环境中使用RabbitMQ

一 环境搭建 首先,由于RabbitMQ使用Erlang编写的,需要运行在Erlang运行时环境上,所以在安装RabbitMQ Server之前需要安装Erlang 运行时环境,可以到Erlang官网下载对应平台的安装文件。如果没有安装运行时环境,安装RabbitMQ Server的时候,会提示需要先安装Erlang环境。 安装完成之后,确保已经将Erla...