关于json格式在.net前后台传值的详细示例
首先需要说明的是,json是一种轻量级轻量级的数据交换格式,并且它独立于编程语言,与XML序列化相比,JSON序列化后产生的数据一般要比XML序列化后数据体积小.
这也是json之所以流行,被广泛使用的原因.
在.NET中有三种常用的JSON序列化的类,分别是
System.Web.Script.Serialization.JavaScriptSerializer类、
System.Runtime.Serialization.Json.DataContractJsonSerializer类
前两种需要.netframework3.X以上的版本才能支持.
和Newtonsoft.Json.JsonConvert类(非微软提供,通用的JSON转换类库),下载网址是:http://www.codeplex.com/json/。
在演示json示例之前不得不说明一下,json的三种格式.示例中会演示这三种格式在后台文件里分别对应的是什么样子.
以及这三种格式在前后台交互时的序列化和反序列化.
json的三种格式:
//json格式一 var json1 = { "employees": [ { "firstName": "Bill", "lastName": "Gates" }, { "firstName": "George", "lastName": "Bush" }, { "firstName": "Thomas", "lastName": "Carter" } ] } //json格式二 var json2 = [ { "firstName": "Bill", "lastName": "Gates" }, { "firstName": "George", "lastName": "Bush" }, { "firstName": "Thomas", "lastName": "Carter" } ]; //json格式三 var json3 = { 'name': 'fujiong', 'lastname': 'ruanjingtian' };
下面就详细的演示一下,这三种方式和json的三种格式结合的示例:
先定义一个Person类
public class Person { public string Name { get; set; } public int Age { get; set; } }
public class Handler1 : IHttpHandler { public void ProcessRequest(HttpContext context) { //序列化和反序列化json的类 JavaScriptSerializer serializer = new JavaScriptSerializer(); //普通json格式:对应json格式一 string result = serializer.Serialize(new Person() { Name = "张三", Age = 22 }); //对应json格式二 Person[] arr = new Person[2] { new Person() { Name = "张三", Age = 22 }, new Person() { Name = "李彦宏", Age = 32 } }; //对应json格式三 Dictionary<string, Person[]> arrs = new Dictionary<string, Person[]>(); arrs.Add("第一条", new Person[] { new Person() { Name = "张三", Age = 22 }, new Person() { Name = "李彦宏", Age = 32 } }); //序列化对象数组为json格式 string result2 = serializer.Serialize(arr); context.Response.ContentType = "text/plain"; context.Response.Write(result2); } }
前台传到后台的json串反序列化为对象.
//序列化和反序列化json的类 JavaScriptSerializer serializer = new JavaScriptSerializer(); //对应json格式一 string test = "{ 'Name': 'fumaojiong', 'Age': '22' }"; //对应json格式二 Person[] arr = new Person[2] { new Person() { Name = "张三", Age = 22 }, new Person() { Name = "李彦宏", Age = 32 } }; string test2 = "[{'Name':'张三','Age':22},{'Name':'李彦宏','Age':32}]"; //对应json格式三 Dictionary<string, Person[]> arrs = new Dictionary<string, Person[]>(); arrs.Add("第一条", new Person[] { new Person() { Name = "张三", Age = 22 }, new Person() { Name = "李彦宏", Age = 32 } }); string test3 = "{'第一条':[{'Name':'张三','Age':22},{'Name':'李彦宏','Age':32}]}"; //反序列化json格式三 Dictionary<string, Person[]> result = (Dictionary<string, Person[]>)serializer.Deserialize(test3, typeof(Dictionary<string, Person[]>)); Person[] parr = result["第一条"]; //反序列化json格式二 Person[] parr2 = (Person[])serializer.Deserialize(test2,typeof(Person[])); //反序列化json格式一 Person parr3 = (Person)serializer.Deserialize(test, typeof(Person)); Response.Write(parr[1].Name);
参考博文:http://blog.csdn.net/zhoufoxcn/article/details/6254657