## 序列化和反序列化
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 通过二进制序列化器完成工具
Person p1 = new Person();
p1.Age = 12;
Person p2 = new Person();
p2.Age =22;
Person p3 = new Person();
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.Age = 12;
Person p2 = new Person();
p2.Age =22;
Person p3 = new Person();
p3.Age = 32;
list.Add(p1);
list.Add(p2);
list.Add(p3);
2.3 通过二进制序列化器完成工具
![](https://images2018.cnblogs.com/blog/1238666/201804/1238666-20180422150424037-344962896.png)
![](https://images2018.cnblogs.com/blog/1238666/201804/1238666-20180422150516367-730320143.jpg)
![](https://images2018.cnblogs.com/blog/1238666/201804/1238666-20180422150522288-351437607.png)
![](https://images2018.cnblogs.com/blog/1238666/201804/1238666-20180422150527157-1127384135.png)
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();
![](https://images2018.cnblogs.com/blog/1238666/201804/1238666-20180422150541763-52558405.png)
解析:系统的类型都是默认支持序列化的,例如int和string
[Serializable]
[ComVisible(true)]
public sealed class String :
[Serializable]
[ComVisible(true)]
public struct Int32 :
Type 'Day10_0100序列化.Car' in Assembly(程序集) 'Day10_0100序列化, Version=
3.可以使用序列化手段加密码?
解析:答案是否定的。序列化是可逆的。 MD5加密算法是不可逆的。
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(
}
Console.ReadKey();
![](https://images2018.cnblogs.com/blog/1238666/201804/1238666-20180422150541763-52558405.png)