zoukankan      html  css  js  c++  java
  • C#xml泛型序列化

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    using System.Web.Script.Serialization;
    using System.Xml;
    using System.Xml.Serialization;
    
    namespace Com.AppCode.Helper
    {
        /// <summary>
        /// 泛型序列化
        /// </summary>
        public class XmlHelper
        {
            /// <summary>
            /// 对象序列化成 XML String
            /// </summary>
            public static string Serialize<T>(T obj)
            {
                string xmlString = string.Empty;
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                using (MemoryStream ms = new MemoryStream())
                {
                    xmlSerializer.Serialize(ms, obj);
                    xmlString = Encoding.UTF8.GetString(ms.ToArray());
                }
                return xmlString;
            }
    
            /// <summary>
            /// XML String 反序列化成对象
            /// </summary>
            public static T Deserialize<T>(string xmlString)
            {
                T t = default(T);
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                using (Stream xmlStream = new MemoryStream(Encoding.UTF8.GetBytes(xmlString)))
                {
                    using (XmlReader xmlReader = XmlReader.Create(xmlStream))
                    {
                        Object obj = xmlSerializer.Deserialize(xmlReader);
                        t = (T)obj;
                    }
                }
                return t;
            }
    
            /// <summary>
            /// XML String 反序列化成对象
            /// </summary>
            public static List<T> DeserializeToList<T>(string xml)
            {
                return new List<T>();
            }
    
            /* Test
                var xml =
                    @"<classes>
                        <class>    
                        <classname>高三一班</classname>     
                        <id>1</id>     
                        <remark>学霸</remark>     
                        <students>      
                          <student>        
                            <name>爱因斯坦</name>         
                            <sex>男</sex>         
                            <age>18</age>      
                          </student>         
                          <student>          
                            <name>牛顿</name>           
                            <sex>男</sex>           
                            <age>18</age>        
                          </student>       
                        </students>  
                      </class>   
                      <class>    
                        <classname>高三Ⅹ班</classname>     
                        <id>1</id>     
                        <remark>渣渣</remark>     
                        <students>      
                          <student>        
                            <name>特朗普</name>         
                            <sex>男</sex>         
                            <age>18</age>      
                          </student>       
                          <student>        
                            <name>本</name>         
                            <sex>男</sex>         
                            <age>18</age>      
                          </student>    
                        </students>  
                      </class> 
                    </classes>";
                List<ClassSet> list = XmlHelper.XmlToList<ClassSet>(xml, "classes");
                
        [Serializable, XmlType("class")]
        public class ClassSet
        {
            [XmlElement("classname")]
            public string Name { get; set; }
    
            [XmlElement("id")]
            public int Id { get; set; }
    
            [XmlElement("remark")]
            public string Remark { get; set; }
    
            [XmlArray("students")]
            public List<Student> Students { get; set; }
    
            [Serializable, XmlType("student")]
            public class Student
            {
                [XmlElement("name")]
                public string Name { get; set; }
    
                [XmlElement("sex")]
                public string Sex { get; set; }
    
                [XmlElement("age")]
                public int Age { get; set; }
    
            }
        }
             */
    
            public static List<T> XmlToList<T>(string xml, string rootName) where T : class
            {
                XmlSerializer serializer = new XmlSerializer(typeof(List<T>), new XmlRootAttribute(rootName));
                using (StringReader sr = new StringReader(xml))
                {
                    List<T> list = serializer.Deserialize(sr) as List<T>;
                    return list;
                }
            }
    
        }
        /// <summary>  
        /// <remarks>Xml序列化与反序列化</remarks>  
        /// <creator>zhangdapeng</creator>  
        /// </summary>  
        public class XmlSerializeUtil
        {
            #region 反序列化  
            /// <summary>  
            /// 反序列化  
            /// </summary>  
            /// <param name="type">类型</param>  
            /// <param name="xml">XML字符串</param>  
            /// <returns></returns>  
            public static object Deserialize(Type type, string xml)
            {
                using (StringReader sr = new StringReader(xml))
                {
                    XmlSerializer xmldes = new XmlSerializer(type);
                    return xmldes.Deserialize(sr);
                }
            }
            /// <summary>  
            /// 反序列化  
            /// </summary>  
            /// <param name="type"></param>  
            /// <param name="xml"></param>  
            /// <returns></returns>  
            public static object Deserialize(Type type, Stream stream)
            {
                XmlSerializer xmldes = new XmlSerializer(type);
                return xmldes.Deserialize(stream);
            }
            #endregion
    
            #region 序列化  
            /// <summary>  
            /// 序列化  
            /// </summary>  
            /// <param name="type">类型</param>  
            /// <param name="obj">对象</param>  
            /// <returns></returns>  
            public static string Serializer(Type type, object obj)
            {
                MemoryStream Stream = new MemoryStream();
                XmlSerializer xml = new XmlSerializer(type);
                //序列化对象  
                xml.Serialize(Stream, obj);
                Stream.Position = 0;
                StreamReader sr = new StreamReader(Stream);
                string str = sr.ReadToEnd();
    
                sr.Dispose();
                Stream.Dispose();
    
                return str;
            }
    
            #endregion
        }
    }
  • 相关阅读:
    最长回文子串 leetcode
    leetcode Plus one
    n的阶乘末尾有几个0?
    求两数的最大公约数和最小公倍数
    汉诺塔
    求n的阶乘
    svn book
    求斐波那契数列第n项
    判断一个数是否是素数
    <C Traps and Pitfalls>笔记
  • 原文地址:https://www.cnblogs.com/hofmann/p/11766030.html
Copyright © 2011-2022 走看看