## 序列化和反序列化

## 序列化和反序列化

   List<Person> list = new List<Person>();
            Person p1 = new Person();
            ## 序列化和反序列化p1.Name = "邓超";
            p1.Age = 12;

            Person p2 = new Person();
            ## 序列化和反序列化p2.Name = "Baby";
            p2.Age =22;

            Person p3 = new Person();
            ## 序列化和反序列化p3.Name = "范冰冰";
            p3.Age = 32;

            list.Add(p1);
            list.Add(p2);
            list.Add(p3);


    ## 序列化和反序列化
    0.内存中数据---->硬盘 
      手段:IO流
                 1.用IO操作文本文件
                 2.File Directory 操作文件和目录
                 3.使用FileInfo和DirecoryInfo操作文件和目录
                 List<Person>
                 Person1 : 张三|12
                 Person2   李四|12
                 Person3   王五|12
            XML文件
                1.加载文件  
                2.获取根节点
                3.遍历节点 节点类型 XmlNode
                List<Person>  
                <Person>
                  <pname></pname>
                </Person>
                 <Person>
                  <pname></pname>
                </Person>
                 <Person>
                  <pname></pname>
                </Person>
    1.序列化:保存对象的全景图
                 List<Person>----->保存对象到硬盘
                 
    2.案例 :保存3个人的信息到硬盘
       2.1定制一个Person
        //特性:说明该类可以被序列化
        [Serializable]
        public class Person
        {
            public string  Name { get; set; }
            public int Age { get; set; }
        }
       2.2 在Main函数中形成一个集合,保存3个Person实例
         List<Person> list = new List<Person>();
                Person p1 = new Person();
                ## 序列化和反序列化p1.Name = "邓超";
                p1.Age = 12;
    
                Person p2 = new Person();
                ## 序列化和反序列化p2.Name = "Baby";
                p2.Age =22;
    
                Person p3 = new Person();
                ## 序列化和反序列化p3.Name = "范冰冰";
                p3.Age = 32;
    
                list.Add(p1);
                list.Add(p2);
                list.Add(p3);
       2.3 通过二进制序列化器完成工具 
## 序列化和反序列化## 序列化和反序列化## 序列化和反序列化## 序列化和反序列化
 
      2.4 如何保证类中成员都可以被序列化?
         解析:系统的类型都是默认支持序列化的,例如int和string
         [Serializable]
    [ComVisible(true)]
    public sealed class String : 
    
    [Serializable]
    [ComVisible(true)]
    public struct Int32 : 
    
    
    Type 'Day10_0100序列化.Car' in Assembly(程序集) 'Day10_0100序列化, Version=## 序列化和反序列化1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
    

3.可以使用序列化手段加密码?
  解析:答案是否定的。序列化是可逆的。 MD5加密算法是不可逆的。
  ## 序列化和反序列化https://howsecureismypassword.net/
  
4.反序列化
 BinaryFormatter bf = new BinaryFormatter();
            FileStream fs = new FileStream("save.bin",FileMode.Open);
            List<Person> list= (List<Person>)bf.Deserialize(fs);
            foreach (Person item in list)
            {
                Console.WriteLine(## 序列化和反序列化item.Name);
            }
            Console.ReadKey();
  ## 序列化和反序列化