實際中, 序列化實體到XML 比較多, 由於習慣存儲過程接收XML參數, 而後解析到臨時表, 再進行相應邏輯操做.
序列化 自己不復雜, 主要實體定義及註解來完成名稱轉譯等內容.
爲了配合數據庫接收xml. 增長了"/root"的層級.html
public static class SerializerHelper { private static readonly String xmlFormat = "<?xml version=\"1.0\"?>\r\n<root>\r\n{0}\r\n</root>"; public static T Deserializer<T>(String xml) { T obj = default(T); Byte[] bs = Encoding.Default.GetBytes(xml); using (MemoryStream ms = new MemoryStream(bs)) { XmlSerializer serializer = new XmlSerializer(typeof(T)); obj = (T)serializer.Deserialize(ms); } return obj; } public static String Serializer<T>(T obj) { String xml = String.Empty; xml = SerializationService<T>(obj); return String.Format(xmlFormat, xml); } public static String Serializer<T>(IEnumerable<T> obj) { StringBuilder sb = new StringBuilder(); foreach (var ins in obj) { String xml = SerializationService<T>(ins); sb.AppendLine(xml); } return String.Format(xmlFormat, sb.ToString()); } public static String Serializer<T1, T2>(IEnumerable<T1> obj1, IEnumerable<T2> obj2) { StringBuilder sb = new StringBuilder(); foreach (var item in obj1) { string xml = SerializationService<T1>(item); sb.AppendLine(xml); } foreach (var item in obj2) { string xml = SerializationService<T2>(item); sb.AppendLine(xml); } return String.Format(xmlFormat, sb.ToString()); } private static string SerializationService<T>(T obj) { string xml = string.Empty; using (MemoryStream ms = new MemoryStream()) { XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add(String.Empty, String.Empty); XmlSerializer serializer = new XmlSerializer(typeof(T)); serializer.Serialize(ms, obj, ns); ms.Position = 0; StreamReader reader = new StreamReader(ms, Encoding.UTF8); reader.ReadLine(); xml = reader.ReadToEnd(); reader.Close(); } return xml; } private static string SerializationService<T>(SerializerWrapper<T> obj) { string xml = string.Empty; using (MemoryStream ms = new MemoryStream()) { XmlSerializer serializer = new XmlSerializer(typeof(SerializerWrapper<T>)); serializer.Serialize(ms, obj); ms.Position = 0; StreamReader reader = new StreamReader(ms, Encoding.UTF8); xml = reader.ReadToEnd(); reader.Close(); } return xml; } }
反序列化;
須要注意的是, 第一段採用StringReader 轉換字符串到sr做爲反序列化參數, 以後代碼段使用流.數據庫
//XML解析用 A20ProductName ProductInfo = new A20ProductName(); //解析XML using (StringReader sr = new StringReader(DictionaryXml)) { XmlSerializer xmldes = new XmlSerializer(typeof(A20ProductName)); ProductInfo = (A20ProductName)xmldes.Deserialize(sr); } 或者: public static void xmlDeserialize() { //xml來源多是外部文件,也多是從其餘系統得到 FileStream file = new FileStream(@"http://www.cnblogs.com/info.xml", FileMode.Open, FileAccess.Read); XmlSerializer xmlSearializer = new XmlSerializer(typeof(BaseInfo)); BaseInfo info = (BaseInfo)xmlSearializer.Deserialize(file); file.Close(); foreach (Person per in info.PerList) { Console.WriteLine("人員:"); Console.WriteLine(" 姓名:" + per.Name); Console.WriteLine(" 年齡:" + per.Age); foreach (Books b1 in per.BookList) { foreach (Book b in b1.BookList) { Console.WriteLine(" 書:"); Console.WriteLine(" ISBN:" + b.ISBN); Console.WriteLine(" 書名:" + b.Title); } } } } var revolvingFunds = default(DocumentElement); Byte[] bs = Encoding.Default.GetBytes(postResult); using (MemoryStream ms = new MemoryStream(bs)) { XmlSerializer serializer = new XmlSerializer(typeof(DocumentElement)); revolvingFunds = (DocumentElement)serializer.Deserialize(ms); }
最後額外xml格式字符串 C#中使用:app
XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(XML); //查找<DataXML> XmlNode root = xmlDoc.SelectSingleNode("DataXML"); string objectInstanceID = root["ObjectInstanceID"].InnerText; string billID = root["BillID"].InnerText; string state = root["State"].InnerText;
參考優秀博客:
http://www.javashuo.com/article/p-ywudfajw-bv.html
http://www.javashuo.com/article/p-csdmspwq-co.htmlpost