序列化、XML序列化与深拷贝操作

要把一个复杂对象弄成一个文件发给别人的话,自己定义存储格式要费很大的周折,不过微软早就帮咱们把算法写好了,只要套用一个函数就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 }
原文地址:https://www.cnblogs.com/houzhitong/p/2403914.html