程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> JSON序列化與反序列化

JSON序列化與反序列化

編輯:關於ASP.NET
    以下是對JSON序列化與反序列化進行了詳細的分析介紹,需要的朋友可以過來參考下  

    方法一:引入System.Web.Script.Serialization命名空間使用 JavaScriptSerializer類實現簡單的序列化序列化類:Personnel

    復制代碼 代碼如下:
        public class Personnel
            {
                public int Id { get; set; }
                public string Name { get; set; }
            }


    執行序列化反序列化:

    復制代碼 代碼如下:
    protected void Page_Load(object sender, EventArgs e)
            {
                Personnel personnel = new Personnel();
                personnel.Id = 1;
                personnel.Name = "小白";

                JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
                //執行序列化
                string r1 = jsonSerializer.Serialize(personnel);

                //執行反序列化
                Personnel _Personnel = jsonSerializer.Deserialize<Personnel>(r1);
             }


    r1輸出結果:{"Id":1,"Name":"小白"}
    可以使用 ScriptIgnore屬性標記不序列化公共屬性或公共字段。

    復制代碼 代碼如下:
            public class Personnel
            {
                [ScriptIgnore]
                public int Id { get; set; }
                public string Name { get; set; }
            }


    r1輸出結果:{"Name":"小白"}

    方法二:引入 System.Runtime.Serialization.Json命名空間使用 DataContractJsonSerializer類實現序列化

    序列化類:People

    復制代碼 代碼如下:
            public class People
            {
                public int Id { get; set; }
                public string Name { get; set; }
            }


    執行序列化反序列化

    復制代碼 代碼如下:
    protected void Page_Load(object sender, EventArgs e)
            {
                People people = new People();
                people.Id = 1;
                people.Name = "小白";


                DataContractJsonSerializer json = new DataContractJsonSerializer(people.GetType());
                string szJson = "";
                //序列化
                using (MemoryStream stream = new MemoryStream())
                {
                    json.WriteObject(stream, people);
                    szJson = Encoding.UTF8.GetString(stream.ToArray());
                }
                //反序列化
                using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(szJson)))
                {
                    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(People));
                    People _people = (People)serializer.ReadObject(ms);
                }
             }


    szJson輸出結果:{"Id":1,"Name":"小白"}

    可以使用IgnoreDataMember:指定該成員不是數據協定的一部分且沒有進行序列化,DataMember:定義序列化屬性參數,使用DataMember屬性標記字段必須使用DataContract標記類 否則DataMember標記不起作用。

    復制代碼 代碼如下:
    [DataContract]
            public class People
            {
                [DataMember(Name = "id")]
                public int Id { get; set; }
                [IgnoreDataMember]
                public string Name { get; set; }
            }


    輸出結果: {"id":1}

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved