c#中的Ajax上手篇---JSON的传送与接收
2009-11-08 12:54
274 查看
本篇文章主要介绍如何在Ajax的客户端与服务端之间传送JSON格式的数据。那么我们先来说说什么是JSON吧。
JSON,即是JavaScript对象标记法,英文名称是JavaScript Object Notation,简称JSON
,是 JavaScript Programming Language,
Standard
ECMA-262 3rd Edition - December 1999
的子集合,是从JavaScript的object initializer扩展而来的一种文本格式标记法,是作为数据交换之用的。
相对于XML,JSON在表示资料时更加简洁,例如一个表示帐户的资料,XML中可能表示:
而使用JSON可以这样表示:
下面举一个例子说明。
例如你可以把JSON表示法以POST发送至服务端,例如:
这个这个程序简单地将用户姓名包装成一个对象,并使用toJSONString()将之转换为JSON格式,之后POST至服务端。在服务端的程序如下所示:
Handler1中的中ProcessRequest代码如下:
另外,在服务端还需要对客户端传过来的JSON数据进行反序列化为一个Person对象实例,序列化与反序列化代码如下:
此外,需要一个简单的Person类的定义,
JSON,即是JavaScript对象标记法,英文名称是JavaScript Object Notation,简称JSON
,是 JavaScript Programming Language,
Standard
ECMA-262 3rd Edition - December 1999
的子集合,是从JavaScript的object initializer扩展而来的一种文本格式标记法,是作为数据交换之用的。
相对于XML,JSON在表示资料时更加简洁,例如一个表示帐户的资料,XML中可能表示:
<account> <number>123456</number> <name>Justin</name> <balance>1000</balance> </account>
而使用JSON可以这样表示:
var account = { number : "123456", name: "Justin", balance: "1000" };
下面举一个例子说明。
例如你可以把JSON表示法以POST发送至服务端,例如:
var xmlHttp; function createXMLHttpRequest() { if (window.XMLHttpRequest) { xmlHttp = new XMLHttpRequest(); } else if (window.ActiveXObject) { xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } } function prepareJSON() { var firstname = document.getElementById("FirstName").value; var lastname = document.getElementById("LastName").value; var person = new Object(); person.FirstName = firstname; person.LastName = lastname; return person.toJSONString(); } function handleAccount() { var json = prepareJSON(); var url = "Handler1.ashx?timeStamp" + new Date().getTime(); createXMLHttpRequest(); xmlHttp.onreadystatechange = handleStateChange; xmlHttp.open("POST", url); xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xmlHttp.send(json); } function handleStateChange() { if (xmlHttp.readyState == 4) { if (xmlHttp.status == 200) { document.getElementById("response").innerHTML = xmlHttp.responseText; var json = eval('(' + xmlHttp.responseText + ')'); } } }
这个这个程序简单地将用户姓名包装成一个对象,并使用toJSONString()将之转换为JSON格式,之后POST至服务端。在服务端的程序如下所示:
Handler1中的中ProcessRequest代码如下:
public void ProcessRequest(HttpContext context) { HttpRequest request = context.Request; Stream stream = request.InputStream; string json = string.Empty; string responseJson = string.Empty; if (stream.Length != 0) { StreamReader streamReader = new StreamReader(stream); json = streamReader.ReadToEnd(); Person person = JSONHelper.Deserialize<Person>(json); person.FirstName = "FN"; person.LastName = "LN"; responseJson = JSONHelper.Serialize<Person>(person); } if (!string.IsNullOrEmpty(responseJson)) { context.Response.ContentType = "text/plain"; context.Response.ContentType = "UTF-8"; context.Response.Write(responseJson); } }
另外,在服务端还需要对客户端传过来的JSON数据进行反序列化为一个Person对象实例,序列化与反序列化代码如下:
using System.Runtime.Serialization; using System.Runtime.Serialization.Json; using System.IO; using System.Text; public class JSONHelper { public static string Serialize<T>(T obj) { DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType()); MemoryStream ms = new MemoryStream(); serializer.WriteObject(ms, obj); string retVal = Encoding.Default.GetString(ms.ToArray()); return retVal; } public static T Deserialize<T>(string json) { MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json)); DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(T)); T obj = (T)serializer.ReadObject(ms); ms.Close(); return obj; } }
此外,需要一个简单的Person类的定义,
using System.Runtime.Serialization; namespace HelloAjaxJson { [DataContract] public class Person { public Person() { } public Person(string firstname, string lastname) { this.FirstName = firstname; this.LastName = lastname; } [DataMember] public string FirstName { get; set; } [DataMember] public string LastName { get; set; } } }
相关文章推荐
- ajax给webmethod方法传递json数组,C#接收
- c#实现ajax通信:向后台发送JSON字符串,接收响应字符串,并转换为对象
- c#(asp.net)接收字符串(多条json)处理
- 接口报错--写接口,返回json给ajax时,一直是error函数接收。
- C#Socket传送/接收中文出现乱码的解决办法
- ajax 前台接收json 为undefined
- controller接收ajax发送的json
- 1:HTML 中 onclick 触发函数 xxx(param) 要传递对象参数的解决方法 2:LocalStorage存储JSON对象的问题 3:ajax请求传送参数为对象问题
- jquery接收PHP传送过来的JSON格式数据以及处理。
- jquery的ajax异步请求接收返回json数据
- 初涉Ajax,以post或get方法发送数据,以json或xml形式接收服务器返回的请求
- ajax如何传送数组、JSON.parse和JSON.stringify区别
- ajax实现异步刷新,并通过json接收发送数据!
- Ajax提交表单并接收json实例代码
- 在asp.net 2.0中利用Ajax2.0实现JSON传送大量页面数据
- JavaScript使用Ajax传送JSON数据
- node如何接收ajax post方式传来的json类型数据
- Ajax使用方法,经典Ajax封装,可接收解析后台传回的json对象和json数组
- AJAX对于JAVA接收HttpServletRequest和json字符串两种方式的传递写法
- C#中利用jQuery获取Json值示例,Ajax方式。