關於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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM