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

c#數據的序列化和反序列化

編輯:C#入門知識

一段時間沒有寫東西了,不是因為俺懶,也不是因為俺忙,是因為俺上不了網....

今天項目中用到了數據的序列化和反序列化,數據用的是EF自動生成的代碼,開始用的.net 自帶的DataContractJsonSerializer進行序列化和反序列化,當代碼寫完以後,調試,我X(原諒我的髒話,因為確實讓我生氣),實體因為有[DataContractAttribute(IsReference=true  )] 這樣一個屬性,提示不能序列化,當然手改一下啦,改完以後,提示基類EntityObject 的這個屬性不可以

MY God!!

後來也是因為DataContractJsonSerializer 反序列化成集合的時候不好使,所以才下定決心廢棄。采用了第三方的東西:傳說中的Json.net

今天我也是要說這個組件序列化和反序列化的功能:

廢話少說,線上model ,作為提供數據的使用

public  class wf_Task_Inbox
    {       
        public wf_Task_Inbox(string id,string name)
        {
            this.ID = id;
            this.Name = name;
        }
        [DataMember ]
        public string ID { get; set; }
        [DataMember]
        public string Name{get ;set ;}
        
    }
 
這裡主要是作為測試時的數據源

接下來是序列化的代碼,為了對比清楚,先奉上.net 自帶的方法:

 /// <summary>
        /// 把一個對象轉化為json格式數據
        /// </summary>
        /// <param name="entity"></param>
        /// <returns></returns>
        public   string EntityToJson(wf_Task_Inbox entity)
        {
            DataContractJsonSerializer serializer = new DataContractJsonSerializer(entity.GetType());
            using (MemoryStream stream = new MemoryStream())
            {
                serializer.WriteObject(stream, entity);               
                return Encoding.UTF8.GetString(stream .ToArray ());
            }

        }
返回的是個字符串,集合序列化的方法類似;

下邊是json.net的代碼:

JsonConvert .SerializeObject  (list, Formatting.None  ); 有且只有一行!!!!當然首先得添加json.net的引用

接下是反序列化的代碼,.net 自帶:

 /// <summary>        /// 將json 數據轉化為對象        /// </summary>        /// <param name="entity"></param>        /// <param name="jsonstring"></param>        /// <returns></returns>        public   wf_Task_Inbox JsonToEntity(string jsonstring)        {            DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(wf_Task_Inbox));            using (MemoryStream mStream = new MemoryStream(Encoding.UTF8.GetBytes(jsonstring)))            {                return serializer.ReadObject(mStream) as wf_Task_Inbox;            }        }     
同時也是因為自帶的木有泛型的擴展,所以不太喜歡,json.net的方法:

JsonConvert.DeserializeObject<List<wf_Task_Inbox>>(jsonstring) ; 這個是集合的,當然單個對象的怎麼弄,你懂的,去掉《T》 就行了呗....

生成的序列化數據是標准的json格式:

[{"ID":"0","Name":"姓名:0"},{"ID":"1","Name":"姓名:1"},{"ID":"2","Name":"姓名:2"},{"ID":"3","Name":"姓名:3"},{"ID":"4","Name":"姓名:4"},{"ID":"5","Name":"姓名:5"},{"ID":"6","Name":"姓名:6"},{"ID":"7","Name":"姓名:7"},{"ID":"8","Name":"姓名:8"},{"ID":"9","Name":"姓名:9"}]

最後附上json.net的下載地址,下載包裡有幫助和各個版本的json.net

aspx">http://json.codeplex.com/Release/ProjectReleases.aspx

 

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