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

我們提供的服務有:成都做網站、成都網站制作、微信公眾號開發(fā)、網站優(yōu)化、網站認證、友誼ssl等。為上1000家企事業(yè)單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的友誼網站制作公司
公共類的公共讀寫字段或者屬性
XmlElement對象
XmlNode對象
Dataset對象
實現了Icollection 或IEnumerable的類
該類在設計中有一個設計需求:
需要被序列化的類要提供一個空參數的構造函數,否則運行時會出現異常.。
在開發(fā)過程中可能會有很多地方要用到對象和XML相互轉化,在此提供一個通用的類,提供泛類型的支持。
- ///
- /// 序列化幫助類
- ///
- public class SHelper
- {
- ///
- /// 對象到XML-----泛類型
- ///
- ///
- ///
- ///
- public static string SaveXmlFromObj
(T obj) - {
- if (obj == null) return null;
- XmlSerializer serializer = new XmlSerializer(typeof(T));
- MemoryStream stream = new MemoryStream();
- XmlTextWriter xtw = new XmlTextWriter(stream, Encoding.UTF8);
- xtw.Formatting = Formatting.Indented;
- try
- {
- serializer.Serialize(stream, obj);
- }
- catch { return null; }
- stream.Position = 0;
- string returnStr = string.Empty;
- using (StreamReader sr = new StreamReader(stream, Encoding.UTF8))
- {
- string line = "";
- while ((line = sr.ReadLine()) != null)
- {
- returnStr += line;
- }
- }
- return returnStr;
- }
- ///
- /// XML到反序列化到對象----支持泛類型
- ///
- ///
- ///
- ///
- public static T LoadObjFromXML
(string data) - {
- using (MemoryStream stream = new MemoryStream())
- {
- using (StreamWriter sw = new StreamWriter(stream, Encoding.UTF8))
- {
- sw.Write(data);
- sw.Flush();
- stream.Seek(0, SeekOrigin.Begin);
- XmlSerializer serializer = new XmlSerializer(typeof(T));
- try
- {
- return ((T)serializer.Deserialize(stream));
- }
- catch { return default(T); }
- }
- }
- }
- }
該類提供兩方法,一個是從實體到返回XML字符串的方法,一個是把XML字符串裝成對象實體的方法。下面我們來看看這個類是怎么用的。
首先建兩個類USer和Users,User測試一個實體的序列化和反序列化,USers測試一個List集合序列化和反序列化。注意這兩個類都標注了[Serializable]特性,并且提供了空參數的構造函數。
- [Serializable]
- public class User
- {
- public int ID { get; set; }
- public string Name { get; set; }
- public string Add { get; set; }
- public int Age { get; set; }
- public User()
- {
- this.ID = default(int);
- this.Name = default(string);
- this.Add = default(string);
- this.Age = default(int);
- }}
- [Serializable]
- public class Users
- {
- public List
Datas - { get; set; }
- public Users()
- { this.Datas=new List
(); - }
- }
下面我們建一個頁面Default.aspx,在這個頁面中我們測試序列化,提供兩個按鈕和兩個TextBox,來分別顯示單個實體的序列化和List集合的序列化。
代碼
后臺代碼的實現:
代碼
- ///
- /// 一個對象序列化
- ///
- ///
- /// protected void Button1_Click(object sender, EventArgs e)
- { User user = new User()
- { ID=1001,Name="小王",Add="北京",Age=21};
- var str = SHelper.SaveXmlFromObj
(user); this.TextBox1.Text = str; } - ///
- /// 多個對象序列化
- ///
- ///
- /// protected void Button2_Click(object sender, EventArgs e)
- { Users users = new Users(); User user = new User()
- { ID = 1001, Name = "小王", Add = "北京", Age = 21 }; users.Datas.Add(user);
- users.Datas.Add(user);
- users.Datas.Add(user);
- var str = SHelper.SaveXmlFromObj
(users); this.TextBox2.Text = str; }
序列化結果如下:
單對象:
- xmlns:xsd="http://www.w3.org/2001/XMLSchema">
1001 小王 北京 21
List集合:
- xmlns:xsd="http://www.w3.org/2001/XMLSchema">
1001 小王 北京 21 1001 小王 北京 21 1001 小王 北京 21
下面我們來測試反序列化:
首先建一個webservice,寫兩個測試方法:
代碼
- [WebMethod]
- public string GetObjFromXml(string data)
- { var obj = SHelper.LoadObjFromXML
(data); - if (obj != null)
- { return obj.Name; }
- else
- { return "傳入數據出錯"; } }
- [WebMethod]
- public string GetObjsFromXml(string data)
- { var obj = SHelper.LoadObjFromXML
(data); - if (obj != null)
- { string returnstr = "";
- foreach (User user in obj.Datas)
- { returnstr += user.Name + "\n"; }
- return returnstr; }
- else { return "傳入數據出錯"; }
- }
編譯后運行,我們用剛才序列化出來的字符串貼出參數值位置就可以測試反序列化的方法,在此不再詳述,有興趣的童鞋可以把實例代碼運行。
分享題目:XML和實體序列化和反序列化
網站鏈接:http://m.5511xx.com/article/cdhdcdh.html


咨詢
建站咨詢
