Elijah

治愈系代码研究基地
  首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

[传智播客学习日记]序列化、XML序列化与深拷贝操作

Posted on 2011-10-27 10:46  Elijah  阅读(313)  评论(0编辑  收藏  举报

要把一个复杂对象弄成一个文件发给别人的话,自己定义存储格式要费很大的周折,不过微软早就帮咱们把算法写好了,只要套用一个函数就OK了!越来越觉得C#便捷了!

序列化:

 1 //1.序列化:
2 //给所有要序列化的类、父类、成员的类添加[Serializable]特性
3 //创建写的文件流
4 FileStream fs = File.Create("person.bin");
5 using (fs)
6 {
7 //创建一个序列化器
8 BinaryFormatter bf = new BinaryFormatter();
9 //执行序列化
10 bf.Serialize(fs, p);
11 }
12
13 //2.反序列化:
14 //引用被序列化的成员的类所在的程序集
15 //创建读文件流
16 FileStream fs1 = File.OpenRead("person.bin");
17 Person p1;
18 using (fs1)
19 {
20 //创建序列化器
21 BinaryFormatter bf1 = new BinaryFormatter();
22 //执行反序列化
23 Object obj = bf1.Deserialize(fs1);
24 p1 = (Person)obj;
25 }


XML序列化与上面的类似:

 1 //XML序列化要添加的特性是[XmlIgnoreAttribute]。不能序列化私有字段。
2
3 //1.序列化
4 XmlSerializer xml = new XmlSerializer(typeof(Person));
5 using (FileStream fs = File.OpenWritePersonxml"))
6 {
7 xml.Serialize(fs, list);
8 }
9
10 //2.反序列化
11 XmlSerializer xmlSerializer = new XmlSerializer(typeof(类Person型));
12 using (FileStream fs = File.OpenRead(Person.xml"))
13 {
14 Person p = (Person)xmlSerializer.Deserialize(fs);
15 }


序列化的典型应用就是深拷贝:

 1 public Person Copy()
2 {
3 //定义序列化器
4 BinaryFormatter bf = new BinaryFormatter();
5 //定义内存流
6 MemoryStream ms = new MemoryStream();
7 using (ms)
8 {
9 //将对象序列化到流中。
10 bf.Serialize(ms, this);
11 //让流的指针再回到初始位置
12 ms.Position = 0;
13 //反序列化到新对象里
14 Person p = (Person)bf.Deserialize(ms);
15 return p;
16 }
17 }