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

我們提供的服務(wù)有:成都做網(wǎng)站、成都網(wǎng)站制作、微信公眾號開發(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è)計中有一個設(shè)計需求:
需要被序列化的類要提供一個空參數(shù)的構(gòu)造函數(shù),否則運(yùn)行時會出現(xiàn)異常.。
在開發(fā)過程中可能會有很多地方要用到對象和XML相互轉(zhuǎn)化,在此提供一個通用的類,提供泛類型的支持。
- ///
- /// 序列化幫助類
- ///
- 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); }
- }
- }
- }
- }
該類提供兩方法,一個是從實(shí)體到返回XML字符串的方法,一個是把XML字符串裝成對象實(shí)體的方法。下面我們來看看這個類是怎么用的。
首先建兩個類USer和Users,User測試一個實(shí)體的序列化和反序列化,USers測試一個List集合序列化和反序列化。注意這兩個類都標(biāo)注了[Serializable]特性,并且提供了空參數(shù)的構(gòu)造函數(shù)。
- [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,來分別顯示單個實(shí)體的序列化和List集合的序列化。
代碼
后臺代碼的實(shí)現(xiàn):
代碼
- ///
- /// 一個對象序列化
- ///
- ///
- /// 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; }
序列化結(jié)果如下:
單對象:
- 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 "傳入數(shù)據(jù)出錯"; } }
- [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 "傳入數(shù)據(jù)出錯"; }
- }
編譯后運(yùn)行,我們用剛才序列化出來的字符串貼出參數(shù)值位置就可以測試反序列化的方法,在此不再詳述,有興趣的童鞋可以把實(shí)例代碼運(yùn)行。
當(dāng)前題目:XML和實(shí)體序列化和反序列化
標(biāo)題路徑:http://fisionsoft.com.cn/article/cdhdcdh.html


咨詢
建站咨詢
