json 是一种轻量级的文本传输格式,在AJAX架构的WEB应用中,用于前台和后台的数据交换格式非常简洁方便,下面就如何使用结合一个实例加以说明:
DataContractJsonSerializer是.Net框架3.5版中用于实现对json序列化(即json对象->json文本)和反序列化(json文本->json对象)的类,以下是DataContractJsonSerializer的简单应用方法:
假设客户端有个json对象,该json对象格式为:
[{ID:111,Lat:37.9,Long:116.8},{ID:112,Lat:38.9,Long:16.8},{ID:113,Lat:33.9,Long:119.8}]
通过ajax传到后台服务程序,后台解析代码如下:
引用部分:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Runtime.Serialization;//!!!
using System.Runtime.Serialization.Json;//!!!
using System.IO;
using System.Text;
新建一个与前台传过来的json格式一样的类(注意:类中的属性和客户端传递过来的要一致)
[DataContract] //非常重要,没有这语句,则无法进行反序列化Json对象
public class pmGPS
{
[DataMember]//非常重要
public int ID { get; set; }
[DataMember]//非常重要
public decimal Lat { get; set; }
[DataMember]//非常重要
public decimal Long { get; set; }
//构造函数
public pmGPS(int pmId, decimal pmLat, decimal pmLong)
{
ID = pmId;
Lat = pmLat;
Long = pmLong;
}
}
自定义的类建完后,还要再写一个函数,这个函数演示了DataContractJsonSerializer类的使用方法:
public static T FromJsonTo<T>(string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T jsonObject = (T)ser.ReadObject(ms);
return jsonObject;
}
好了,现在我们可以处理客户端提交过来的json格式的数据了:
//反序列化json
System.IO.Stream stream = Request.InputStream;
System.IO.StreamReader sr = new System.IO.StreamReader(stream, System.Text.Encoding.GetEncoding("UTF-8"));
string sJson = sr.ReadToEnd();
List<pmGPS> pmObj = FromJsonTo<List<pmGPS>>(sJson);
sJson = "";
foreach (pmGPS item in pmObj)
{
sJson += string.Format(" ID:{0},Lat:{1},Long:{2}\r\n", item.ID, item.Lat, item.Long);
}
看到了吧,这时就可以使用item.ID的方法来引用json格式的数据了
下面是序列化的方法,未验证,仅转发一下:
//json 序列化
public static string ToJsJson(object item)
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());
using(MemoryStream ms=new MemoryStream())
{
serializer.WriteObject(ms, item);
StringBuilder sb = new StringBuilder();
sb.Append(Encoding.UTF8.GetString(ms.ToArray()));
return sb.ToString();
}
}
序列化成json字符串
List<TestObj> Users = new List<TestObj>();
Users.Add(new TestObj("t1", "1", "男"));
Users.Add(new TestObj("t2", "2", "女"));
string json = Json.ToJsJson(Users);
Response.Write(json);
Response.End();
List<TestObj> Users = new List<TestObj>();
Users.Add(new TestObj("t1", "1", "男"));
Users.Add(new TestObj("t2", "2", "女"));
string json = Json.ToJsJson(Users);
Response.Write(json);
Response.End();
前台获取后台返回的json字符串:
view plaincopy to clipboardprint?
function updatePage() {
if (request.readyState == 4) {
if (request.status == 200) {
var response = request.responseText;
//转化成对象
//方法1
response = response.parseJSON();
//方法2
// response = eval("(" + response + ")");
//对象访问方式
document.getElementById("d1").innerHTML = response[1].Sex;
//直接输出
// document.getElementById("d1").innerHTML = response;
}
}
}
OK,就到这里!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/xylinzai_xy/archive/2010/09/26/5907610.aspx