通常,我们需要使用Ajax获取一连串的信息,如果我们直接使用文本格式,需要把信息拆分开,比如使用split+格式字符的方式去拆分,但是,如果我们查询的信息中包含了用户差
分的格式字符时,得到的数据就会出错,如果使用XML的话,又显得太麻烦,所以,很多时候使用Json是一种很不错的方式;
关于Json:
JavaScript Object Notation (JSON) 是一种轻量级、基于文本、语言无关的数据交换格式。它是从ECMAScript语言标准衍生而来的;
JSON是结构化数据串行化的文本格式。它衍生自Javascript的对象实字,这定义在ECMAScript语言标准第三版中。JSON能够描述四种简单的类型(字符串、数字、布尔值及
null)和两种结构化类型(对象及数组)。字符串(string)是零个或多个Unicode字符的序列。对象(object)是无次序的零个或多个名/值(name/value)对的集合,这里的name
是string类型,value则可以是string、number、boolean、null、object或array类型。数组(array)是零个或多个value的有序序列。"object"和"array"这两个术语来自
JavaScript规范。JSON的设计目标是使它成为小的、轻便的、文本的,而且是JavaScript的一个子集。
比如,我们需要用Ajax获取一组用户信息,其中包括username,age,sex,address等等;那么组合成的Json字符串为:
{username :'yuliang',age:21,sex:'男',address:'深圳福田'}
调用示例:
--jquery方式--
function getUserInfo(id) {
if (isNaN(id)) { return;}
$.ajax({
type: "get",
url: "AjaxCommonClass.aspx?m=getUserInfoById&id=" + id,
dataType: "json",
success: function(data) {
$("#username").html(data.username);
$("#age").html(data.age);
$("#sex").html(data.sex);
$("#address").html(data.address);
}
});
}
那么如何在后台输出Json格式的字符串呢?function getUserInfo(id) {
if (isNaN(id)) { return;}
$.ajax({
type: "get",
url: "AjaxCommonClass.aspx?m=getUserInfoById&id=" + id,
dataType: "json",
success: function(data) {
$("#username").html(data.username);
$("#age").html(data.age);
$("#sex").html(data.sex);
$("#address").html(data.address);
}
});
}
最简单最原始的方式就是组合字符串:
使用System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append()方式.
最后拼装成:{username :'yuliang',age:21,sex:'男',address:'深圳福田'}
第二种使用.net freamwork3.0 自带封装方法(将对象序列化成JSON格式的字符串)
public static string Serialize(object obj) {
if (obj == null) return null;
System.Runtime.Serialization.Json.DataContractJsonSerializer s = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
s.WriteObject(ms, obj);
return System.Text.Encoding.UTF8.GetString(ms.ToArray());
}
}
这样,我们在传递Ajax数据时直接Response.Write(Serialize(obj))方法即可;if (obj == null) return null;
System.Runtime.Serialization.Json.DataContractJsonSerializer s = new System.Runtime.Serialization.Json.DataContractJsonSerializer(obj.GetType());
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
s.WriteObject(ms, obj);
return System.Text.Encoding.UTF8.GetString(ms.ToArray());
}
}
客户端接收到字符串后,会自动解析成JS对象!