XML 序列化與反序列化

實際中, 序列化實體到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

相關文章
相關標籤/搜索