序列化就是将将对象的状态信息转换为可以存储或传输的形式的过程。
在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,
可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
在.net中有提供了几种序列化的方式:
二进制序列化
XML序列化
SOAP序列化
目前学习的只有第一个方式。所以总结一下方法:
类序列化条件
1)本身标记为可序列化
2)属性的类型标记为可序列化
3)父类也要标记为可序列化
Int,string,这些系统数据类型都已经被标记为可序列化了,而且所有类的基类
object也被标记为可序列化了,
如何将一个类标记为可序列化的类?格式如下:
[Serializable]
public class Name
{
}
如果想将一个类的对象进行二进制序列化,那么这个类中的属性的声明就要使用
最原始的方式,即一个私有字段对应一个公共属性,这样可
以防止在二进制序列化之后,二进制文件中的字段名称不可读。
二进制序列化的步骤:
1、创建一个序列化器
BinaryFormatter bf = new BinaryFormatter();
2、创建一个序列化文件流,以确定将序列化完成的二进制数据保存到磁盘
(不一定必须是磁盘)上的何处
FileStream fs = new FileStream("person.bin", FileMode.OpenOrCreate);
3、使用序列化器将对象序列化为二进制数据
bf.Serialize(fs, lys);
Console.WriteLine("序列化成功");
反序列化的步骤:
1、创建序列化转换器
BinaryFormatter bf = new BinaryFormatter();
2、创建文件流,指向要被反序列化的文件
FileStream fs = new FileStream("Person.bin", FileMode.Open);
3、调用序列化转换器的方法将文件流指向的想进行反序列化,就是将二进制数据转换为原来的对象类型(Person)
4、因为程序不知道序列化之前是什么对象类型,所以才返回object类型
object obj= bf.Deserialize(fs);
5、自己进行类型转换,自己对转换负责
Person lys = obj as Person;
Console.WriteLine(lys.Name);
如果在B项目中对A项目创建的二进制文件进行反序列化,需要添加对A项目的引用,
否则无法成功反序列化
反序列化就是讲二进制文件中存储的数据提取出来,然后创建一个原有类型的对象,
然后将数据赋值给对象的属性。