日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
XML和實(shí)體序列化和反序列化

類為我們提供了自己對象串行化(Serialize)和反串行化(Deserialize)的xml的方法,該類可以序列化的內(nèi)容:   

我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站制作、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、友誼ssl等。為上1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的友誼網(wǎng)站制作公司

公共類的公共讀寫字段或者屬性   

XmlElement對象

XmlNode對象

Dataset對象    

實(shí)現(xiàn)了Icollection 或IEnumerable的類

該類在設(shè)計(jì)中有一個(gè)設(shè)計(jì)需求:

需要被序列化的類要提供一個(gè)空參數(shù)的構(gòu)造函數(shù),否則運(yùn)行時(shí)會(huì)出現(xiàn)異常.。

在開發(fā)過程中可能會(huì)有很多地方要用到對象和XML相互轉(zhuǎn)化,在此提供一個(gè)通用的類,提供泛類型的支持。

 
 
 
  1. ///   
  2.    /// 序列化幫助類  
  3.    ///   
  4.    public class SHelper  
  5.    {  
  6.        ///   
  7.        /// 對象到XML-----泛類型  
  8.        ///   
  9.        ///   
  10.        ///   
  11.        ///   
  12.        public static string SaveXmlFromObj(T obj)  
  13.        {  
  14.            if (obj == null) return null;  
  15.            XmlSerializer serializer = new XmlSerializer(typeof(T));  
  16.            MemoryStream stream = new MemoryStream();  
  17.            XmlTextWriter xtw = new XmlTextWriter(stream, Encoding.UTF8);  
  18.            xtw.Formatting = Formatting.Indented;  
  19.            try 
  20.            {  
  21.                serializer.Serialize(stream, obj);  
  22.            }  
  23.            catch { return null; }  
  24.            stream.Position = 0;  
  25.            string returnStr = string.Empty;  
  26.            using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))  
  27.            {  
  28.                string line = "";  
  29.                while ((line = sr.ReadLine()) != null)  
  30.                {  
  31.                    returnStr += line;  
  32.                }  
  33.            }  
  34.            return returnStr;  
  35.        }  
 
 
 
  1. /// 
  2. /// XML到反序列化到對象----支持泛類型
  3. /// 
  4. /// 
  5. /// 
  6. /// 
  7. public static T LoadObjFromXML(string data)
  8. {
  9. using (MemoryStream stream = new MemoryStream())
  10. {
  11. using (StreamWriter sw = new StreamWriter(stream, Encoding.UTF8))
  12. {
  13. sw.Write(data);
  14. sw.Flush();
  15. stream.Seek(0, SeekOrigin.Begin);
  16. XmlSerializer serializer = new XmlSerializer(typeof(T));
  17. try
  18. {
  19. return ((T)serializer.Deserialize(stream));
  20. }
  21. catch { return default(T); }
  22. }
  23. }
  24. }
  25. }

該類提供兩方法,一個(gè)是從實(shí)體到返回XML字符串的方法,一個(gè)是把XML字符串裝成對象實(shí)體的方法。下面我們來看看這個(gè)類是怎么用的。

首先建兩個(gè)類USer和Users,User測試一個(gè)實(shí)體的序列化和反序列化,USers測試一個(gè)List集合序列化和反序列化。注意這兩個(gè)類都標(biāo)注了[Serializable]特性,并且提供了空參數(shù)的構(gòu)造函數(shù)。

 
 
 
  1. [Serializable] 
  2. public class User 
  3.  { 
  4.  public int ID { get; set; } 
  5.  public string Name { get; set; } 
  6. public string Add { get; set; } 
  7. public int Age { get; set; } 
  8. public User()
  9. {
  10. this.ID = default(int);
  11. this.Name = default(string);
  12. this.Add = default(string);
  13. this.Age = default(int);
  14.  }}
 
 
 
  1. [Serializable] 
  2. public class Users 
  3. public List Datas 
  4. { get; set; } 
  5. public Users()
  6.  { this.Datas=new List(); 
  7. }
  8.  }

下面我們建一個(gè)頁面Default.aspx,在這個(gè)頁面中我們測試序列化,提供兩個(gè)按鈕和兩個(gè)TextBox,來分別顯示單個(gè)實(shí)體的序列化和List集合的序列化。

代碼

后臺(tái)代碼的實(shí)現(xiàn):

 
 
 
  1.  
     
  2.   
  3.  
  4.  
  5.  
 

代碼

 
 
 
  1. ///  
  2. /// 一個(gè)對象序列化 
  3. ///  
  4. ///  
  5. ///  protected void Button1_Click(object sender, EventArgs e) 
  6. { User user = new User() 
  7. { ID=1001,Name="小王",Add="北京",Age=21}; 
  8. var str = SHelper.SaveXmlFromObj(user); this.TextBox1.Text = str; } 
  9. ///  
  10. /// 多個(gè)對象序列化 
  11. ///  
  12. ///  
  13. ///  protected void Button2_Click(object sender, EventArgs e) 
  14. { Users users = new Users(); User user = new User() 
  15. { ID = 1001, Name = "小王", Add = "北京", Age = 21 }; users.Datas.Add(user);
  16.  users.Datas.Add(user);
  17.  users.Datas.Add(user);
  18.  var str = SHelper.SaveXmlFromObj(users); this.TextBox2.Text = str; }

序列化結(jié)果如下:

單對象:

 
 
 
  1. xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 1001 
  2. 小王 北京 
  3. 21

List集合:

 
 
 
  1. xmlns:xsd="http://www.w3.org/2001/XMLSchema">   1001 
  2. 小王 北京 21   1001 
  3. 小王 
  4. 北京 21   1001 
  5. 小王 北京 21  

下面我們來測試反序列化:

首先建一個(gè)webservice,寫兩個(gè)測試方法:

代碼

 
 
 
  1. [WebMethod] 
  2. public string GetObjFromXml(string data) 
  3. { var obj = SHelper.LoadObjFromXML(data); 
  4. if (obj != null) 
  5. { return obj.Name; } 
  6. else 
  7. { return "傳入數(shù)據(jù)出錯(cuò)"; } } 
  8. [WebMethod] 
  9. public string GetObjsFromXml(string data) 
  10. { var obj = SHelper.LoadObjFromXML(data); 
  11. if (obj != null) 
  12. { string returnstr = ""; 
  13. foreach (User user in obj.Datas) 
  14. { returnstr += user.Name + "\n"; } 
  15. return returnstr; } 
  16. else { return "傳入數(shù)據(jù)出錯(cuò)"; }
  17.  }

編譯后運(yùn)行,我們用剛才序列化出來的字符串貼出參數(shù)值位置就可以測試反序列化的方法,在此不再詳述,有興趣的童鞋可以把實(shí)例代碼運(yùn)行。


網(wǎng)頁標(biāo)題:XML和實(shí)體序列化和反序列化
網(wǎng)站網(wǎng)址:http://www.5511xx.com/article/cdhdcdh.html