run in this way,   no why,   only for you heart
CSDN博客(点击进入) CSDN
51CTO(点击进入) 51CTO

C# XML 序列化 及 反序列化

百科:序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

public class Dog
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Sex { get; set; }
        public int Age { get; set; }
        public string ReturnString()
        {
            return Id + " " + Name + " " + Sex + " " + Age;
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {      
            
            List<Dog> list = new List<Dog>()
            {
                    new Dog(){Id=1,Name="旺财",Sex="男",Age=2},
                    new Dog(){Id=2,Name="哈士奇",Sex="女",Age=4},
                    new Dog(){Id=3,Name="藏獒",Sex="男",Age=5},                  
            };
            //序列化
            string xml = XmlSerialize<List<Dog>>(list);
            Console.WriteLine("***********  类--> XML  ************");
            Console.WriteLine(xml);
           
            //反序列化
            string strXML = "<ArrayOfDog><Dog><Id>1</Id><Name>旺财</Name><Sex>男</Sex><Age>2</Age></Dog><Dog><Id>2</Id><Name>哈士奇</Name><Sex>女</Sex><Age>4</Age></Dog><Dog><Id>3</Id><Name>藏獒</Name><Sex>男</Sex><Age>5</Age></Dog></ArrayOfDog>";
            List<Dog> listDog = DESerializer<List<Dog>>(strXML);

            Console.WriteLine("***********  XML--> 类  ************");
            foreach (Dog dog in listDog)
            {
                Console.WriteLine(dog.ReturnString());
            }
            Console.ReadKey();
        }

        /// <summary>
        /// 反序列化
        /// </summary>
        public static T DESerializer<T>(string strXML) where T : class
        {
            try
            {
                using (StringReader sr = new StringReader(strXML))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(T));
                    return serializer.Deserialize(sr) as T;
                }
            }
            catch (Exception ex)
            {
                return null;
            }
        }

        /// <summary>
        /// 序列化
        /// </summary>
        public static string XmlSerialize<T>(T obj)
        {
            using (StringWriter sw = new StringWriter())
            {
                Type t = obj.GetType();
                XmlSerializer serializer = new XmlSerializer(obj.GetType());
                serializer.Serialize(sw, obj);
                sw.Close();
                return sw.ToString();
            }
        }
    }

在这里插入图片描述

C# 序列化与反序列化意义详解:
①序列化基本是指把一个对象保存到文件或流中,比如可以把文件序列化以保存到Xml中,或一个磁盘文件中

②序列化以某种存储形式使自定义对象持久化;
③将对象从一个地方传递到另一个地方。

④将类的值转化为一个一般的(即连续的)字节流,然后就可以将该流写到磁盘文件或任何其他流化目标上。

⑥序列是指将对象的实例状态存储到存储媒体的过程。
在此过程中,先将对象的公共字段以及类的名称(包括类的程序集)转换为字节流,然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。

⑦用处非常大,用于数据传输,对象存贮等。

推荐文章(点击进入)

posted @ 2018-09-29 18:21  _小龙人  阅读(...)  评论(... 编辑 收藏
everyone want to success in this way,   but isn't easy,   i believe i can