国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

XML和實體序列化和反序列化

開發
Xml是Internet環境中跨平臺的,依賴于內容的技術,是當前處理結構化文檔信息的有力工具。本文介紹了對象串行化和反串行化的XML方法。

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

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

XmlElement對象

XmlNode對象

Dataset對象    

實現了Icollection 或IEnumerable的類

該類在設計中有一個設計需求:

需要被序列化的類要提供一個空參數的構造函數,否則運行時會出現異常.。

在開發過程中可能會有很多地方要用到對象和XML相互轉化,在此提供一個通用的類,提供泛類型的支持。

  1. /// <summary>    
  2.    /// 序列化幫助類    
  3.    /// </summary>    
  4.    public class SHelper    
  5.    {    
  6.        /// <summary>    
  7.        /// 對象到XML-----泛類型    
  8.        /// </summary>    
  9.        /// <typeparam name="T"></typeparam>    
  10.        /// <param name="obj"></param>    
  11.        /// <returns></returns>    
  12.        public static string SaveXmlFromObj<T>(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. /// <summary> 
  2. /// XML到反序列化到對象----支持泛類型  
  3. /// </summary> 
  4. /// <typeparam name="T"></typeparam> 
  5. /// <param name="data"></param> 
  6. /// <returns></returns> 
  7. public static T LoadObjFromXML<T>(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. }  

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

首先建兩個類USer和Users,User測試一個實體的序列化和反序列化,USers測試一個List集合序列化和反序列化。注意這兩個類都標注了[Serializable]特性,并且提供了空參數的構造函數。

  1. [Serializable]   
  2. public class User   
  3.  {   
  4.  public int ID { getset; }   
  5.  public string Name { getset; }   
  6. public string Add { getset; }   
  7. public int Age { getset; }   
  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.  }}  
  15.  
  1. [Serializable]   
  2. public class Users   
  3. {   
  4. public List<User> Datas   
  5. getset; }   
  6. public Users()  
  7.  { this.Datas=new List<User>();   
  8. }  
  9.  }  
  10.  

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

代碼

后臺代碼的實現:

  1. <form id="form1" runat="server"> <div>   
  2. <asp:Button ID="Button1" runat="server" Text="一個對象序列化" onclick="Button1_Click" /> <br />   
  3. <asp:TextBox ID="TextBox1" runat="server" Width="100%" Height="200"></asp:TextBox><br />   
  4. <asp:Button ID="Button2" runat="server" Text="多個對象序列化" onclick="Button2_Click" /><br />   
  5. <asp:TextBox ID="TextBox2" runat="server" Width="100%" Height="200">  
  6. </asp:TextBox><br /> </div> </form> 

代碼 

  1. /// <summary>   
  2. /// 一個對象序列化   
  3. /// </summary>   
  4. /// <param name="sender"></param>   
  5. /// <param name="e"></param> 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>(user); this.TextBox1.Text = str; }   
  9. /// <summary>   
  10. /// 多個對象序列化   
  11. /// </summary>   
  12. /// <param name="sender"></param>   
  13. /// <param name="e"></param> 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>(users); this.TextBox2.Text = str; } 

序列化結果如下:

單對象:

  1. <?xml version="1.0"?> 
  2. <User xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  3. xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <ID>1001</ID>   
  4. <Name>小王</Name> <Add>北京</Add>   
  5. <Age>21</Age></User> 
  6.  

List集合:

  1. <?xml version="1.0"?> 
  2. <Users xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  3. xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Datas> <User> <ID>1001</ID>   
  4. <Name>小王</Name> <Add>北京</Add> <Age>21</Age> </User> <User> <ID>1001</ID>   
  5. <Name>小王</Name>   
  6. <Add>北京</Add> <Age>21</Age> </User> <User> <ID>1001</ID>   
  7. <Name>小王</Name> <Add>北京</Add> <Age>21</Age> </User> </Datas></Users> 
  8.  

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

首先建一個webservice,寫兩個測試方法:

代碼 

  1. [WebMethod]   
  2. public string GetObjFromXml(string data)   
  3. { var obj = SHelper.LoadObjFromXML<User>(data);   
  4. if (obj != null)   
  5. return obj.Name; }   
  6. else   
  7. return "傳入數據出錯"; } }   
  8. [WebMethod]   
  9. public string GetObjsFromXml(string data)   
  10. { var obj = SHelper.LoadObjFromXML<Users>(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 "傳入數據出錯"; }  
  17.  }  

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

【編輯推薦】

  1. 2.1 Web應用和web.xml文件
  2. 詳談XML的應用分類及前景
  3. XML數據讀取方式性能比較
  4. Android學習筆記:Layout.xml屬性
責任編輯:于鐵 來源: jzxue.com
相關推薦

2009-08-24 17:14:08

C#序列化

2011-06-01 15:05:02

序列化反序列化

2009-08-06 11:16:25

C#序列化和反序列化

2009-09-09 14:45:41

XML序列化和反序列化

2009-09-09 15:47:27

XML序列化和反序列化

2022-08-06 08:41:18

序列化反序列化Hessian

2009-08-25 14:24:36

C#序列化和反序列化

2019-11-20 10:07:23

web安全PHP序列化反序列化

2009-06-14 22:01:27

Java對象序列化反序列化

2009-08-25 14:43:26

C#序列化和反序列化

2009-09-09 16:10:11

.NET序列化和反序列

2012-04-13 10:45:59

XML

2021-11-18 07:39:41

Json 序列化Vue

2009-07-29 13:39:02

JSON序列化和反序列ASP.NET AJA

2010-03-19 15:54:21

Java Socket

2018-03-19 10:20:23

Java序列化反序列化

2023-12-13 13:49:52

Python序列化模塊

2011-06-01 14:26:11

序列化

2011-06-01 14:50:48

2023-12-26 07:26:07

Java序列化反序列化機制
點贊
收藏

51CTO技術棧公眾號

国内揄拍国内精品少妇国语| 国产精品你懂的在线欣赏| 国产一区二区三区在线免费观看 | 在线精品视频一区二区三四| 7777精品伊人久久久大香线蕉经典版下载 | 国产小黄视频| 国产精品久久久久77777| 福利片在线免费观看| 男女视频在线| 色www精品视频在线观看| 爆操欧美孕妇| 国产精品白丝在线| 国产亚洲精品美女| 成人精品一区二区三区电影| jlzzjlzz亚洲女人| 欧美激情高清视频| 最爽无遮挡行房视频在线| 日韩精品高清在线| 91传媒免费视频| 精品一区二区在线播放| 久久精品国产精品国产精品污| 日本精品久久久久久久久久| 日韩精品电影在线观看| 日本精品一区| 久久激情综合网| 亚洲视频在线二区| 久久99这里只有精品| 亚洲一卡二卡三卡| 九九视频精品免费| 日韩美女爱爱视频| 久久天堂av综合合色蜜桃网| 人妻有码中文字幕| 国产精品每日更新在线播放网址| 99aiav| 亚洲福利电影网| 欧美孕妇孕交| 精品国产一区二区三区不卡| 国产 日韩 欧美一区| 欧美国产日产韩国视频| 西野翔中文久久精品字幕| 国产欧美精品一区二区三区介绍| 婷婷成人基地| 色999日韩自偷自拍美女| 国产成人免费视频| 日韩av在线综合| 亚洲国产精品久久艾草纯爱| 国产精品麻豆一区二区三区| 日韩欧美国产综合一区| 欧美日韩免费看片| 久久久久久高潮国产精品视| 激情小说亚洲图片| 国产精品区一区二区三含羞草| 蜜臀久久久久久久| 色综合手机在线| 在线观看日韩一区| 久久r热视频| 日韩av日韩在线观看| 欧美日韩mv| 久青草视频在线播放| 97碰碰视频| 噜噜噜躁狠狠躁狠狠精品视频| 亚洲欧美韩国综合色| 日本大臀精品| 亚洲久久久久久久久久久| 999国产精品一区| 成人三级在线| 91色综合久久久久婷婷| 久热av在线| 久久久成人精品视频| 午夜日韩福利| 日本男人操女人| 日韩欧美一区二区三区在线| 亚洲国产日韩欧美| 久久99精品久久久久久国产越南| 99热免费在线观看| 欧美成人免费网站| 国产在线日韩精品| 成人在线播放网址| 色88888久久久久久影院野外| 9i看片成人免费高清| 国产精品成人aaaaa网站| 国产综合色产在线精品| 免费观看羞羞视频网站| 亚洲视频第一页| 欧美一区高清| 亚洲国产成人va在线观看麻豆| 日韩欧美国产一二三区| 不卡一区综合视频| 91黄色小网站| 精品国产乱码久久久久久闺蜜| 蜜桃精品wwwmitaows| 特级黄色录像片| 色呦呦一区二区三区| 国产96在线亚洲| 真实国产乱子伦对白视频| 欧美日韩一区二区在线观看| 国产成人一二片| 国产一区二区四区| 精品久久国产字幕高潮| 亚洲成人精品| 免费观看羞羞视频网站| x99av成人免费| 精品一区二区三区在线视频| 国产女主播在线直播| 日本精品一区二区三区在线播放视频| 国产精品自拍三区| 制服丝袜在线播放| 国产麻豆乱码精品一区二区三区 | 国产嫩草影院久久久久| 国产自产自拍视频在线观看| 51成人做爰www免费看网站| 国产精品美女久久久久久久久久久 | 国模精品视频一区二区| 狠狠色丁香婷婷综合久久片| h视频在线观看免费| 国产精品亚洲аv天堂网| 国产精品视频线看| 深夜福利亚洲| 日产精品久久久久久久蜜臀| 欧美v日韩v国产v| 久久婷婷麻豆| 北条麻妃在线| 91色视频在线观看| 中文字幕在线不卡一区| 日韩一区免费| 麻豆tv在线播放| 中文字幕国内精品| 奇米888四色在线精品| av毛片在线看| 日产精品一线二线三线芒果| 精品视频在线看| 99精品国产在热久久婷婷| 亚洲裸体视频| 亚洲自拍在线观看| 欧美性猛片xxxx免费看久爱| 女人天堂亚洲aⅴ在线观看| 日本在线一二三| 成人av免费看| 欧美美女黄视频| 香蕉久久国产| eeuss鲁一区二区三区| 一本色道久久综合亚洲二区三区 | 欧美又大又硬又粗bbbbb| 国产日韩精品久久久| 亚洲一区二区三区在线免费| 精品99在线视频| 国内精品一区二区三区| 国产精品国产三级国产普通话99| 日日天天久久| 天堂a中文在线| 久久久一本精品99久久精品66| 日韩一区二区三区在线| 激情综合网av| 亚洲天堂中文字幕在线观看| 国产xxxxx18| 精品高清视频| 精品无人区乱码1区2区3区在线| 成+人+亚洲+综合天堂| 久久夜色电影| av网在线观看| 男人天堂av片| 国产精品户外野外| 欧美日韩国产影片| 国产成人在线色| 国内精品麻豆美女在线播放视频 | 99在线观看视频| 亚洲第一福利视频| 北岛玲一区二区三区四区| 6080亚洲理论片在线观看| 国产小黄视频| 老牛影视免费一区二区| 中文字幕国产精品| 亚洲二区在线观看| 美女视频黄频大全不卡视频在线播放| 欧美aaaaaaaa| 黄污在线观看| 亚洲一区二区四区| 精品激情国产视频| 一区二区三区丝袜| 久久黄色影院| 中文字幕区一区二区三| 欧美孕妇孕交xxⅹ孕妇交| 视频一区亚洲| 91国产中文字幕| 欧美一级片在线观看| 久久精品一区四区| 国内精品久久久久国产盗摄免费观看完整版 | 国产精品一区一区三区| 卡通动漫国产精品| a级影片在线| 超碰影院在线观看| 国产欧美一区二区三区不卡高清| 国产一区二区美女视频| 精品久久久久久久久久久| 国产精品888| 一区二区三区在线| 日韩精品一区国产| 国产盗摄一区二区| 性欧美精品孕妇| 国产午夜福利视频在线观看|