|
近來的項目中用到了序列化就抽空學習了一下,拿出來給大家分享一下:
類為我們提供了自己對象串行化(Serialize)和反串行化(Deserialize)的xml的方法,該類可以序列化的內容:
公共類的公共讀寫字段或者屬性
XmlElement對象
XmlNode對象
Dataset對象
實現了Icollection 或IEnumerable的類
該類在設計中有一個設計需求:
需要被序列化的類要提供一個空參數的構造函數,否則運行時會出現異常
在開發過程中可能會有很多地方要用到對象和XML相互轉化,在此提供一個通用的類,提供泛類型的支持。
/// <summary> /// 序列化幫助類 /// </summary> public class SHelper { /// <summary> /// 對象到XML-----泛類型 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="obj"></param> /// <returns></returns> public static string SaveXmlFromObj<T>(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; } /// <summary> /// XML到反序列化到對象----支持泛類型 /// </summary> /// <typeparam name="T"></typeparam> /// <param name="data"></param> /// <returns></returns> public static T LoadObjFromXML<T>(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); } } } } }
NET技術:XML和實體序列化和反序列化,轉載需保留來源!
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。