介绍
对象序列化是将对象转换为二进制数据(字节流),反序列化是将二进制数据还原成对象。对象的非持久态的,不仅在程序重启、操作系统重启会造成对象的丢失,就是退出函数范围等都可能造成对象的消失,而序列化与反序列化就是为了完成对象的持久化。
使用
新建可序列化的实体类:
[Serializable] // 该特性标记该类可序列化 public class Person { private int id; private string name; public int Id { get { return id; } set { id = value; } } public string Name { get { return name; } set { name = value; } } public override string ToString() { return string.Format("Id: {0}, Name: {1}", id, name); } }
序列化
var person = new Person(); person.Id = ; person.Name = "张三"; // 初始化序列化工具类对象 BinaryFormatter binaryFormatter = new BinaryFormatter(); FileStream fs = File.OpenWrite("D:/data"); // 获取一个输出流对象 binaryFormatter.Serialize(fs,person); // 执行序列化fs.Close();
反序列化
// 初始化序列化工具类对象 BinaryFormatter binaryFormatter = new BinaryFormatter(); FileStream fs = File.OpenRead("D:/data"); // 获取一个输入流对象 var obj = binaryFormatter.Deserialize(fs); Console.WriteLine(obj); // Id: 1, Name: 张三fs.Close();
注意事项
- 序列化类必须标注上 [Serializable] 特性。
- 序列化类的父类也必须标注上 [Serializable] 特性。
- 序列化类的所有成员的类型也必须标注上 [Serializable] 特性。
- 序列化只会对类中的字段序列化,只能序列化一些状态信息。
- 类结构修改后那么之前序列化的内容尽量不要再用了,否则可能出错。