序列化就是把一个对象保存到一个文件或数据库字段中去,而反序列化则是把这个文件再转化成原来的对象来使用,他的特点就是保存为二进制对象(BIN文件),优点就是容易存储和取出。我们也可以理解为序列化就是存储,反序列化就是取出。
二进制的关键字:BinaryFormatter
序列化关键字:Serialize
反序列化关键字:Deserialize
首先我们定义一个可序列化的类和不可序列化的字段
[Serializable]
class TestInfo
{
public string name;
public int age;
[NonSerialized]
public string sex = "男";
}
下面是一组控件的方法,用来演示序列化存储和反序列化取出
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
TestInfo ts = new TestInfo();
ts.sex = "女";
//打开文件流
FileStream fs = new FileStream("c:/DPanFU/test.bin", FileMode.Open);
//二进制方式
BinaryFormatter bf = new BinaryFormatter();
//反序列化打开的文件流
ts =(TestInfo)bf.Deserialize(fs);
this.textBox1.Text = ts.age + "\n" + ts.name+"\n"+ts.sex;
}
private void button1_Click_1(object sender, EventArgs e)
{
//需要在该类标记为可序列化(serializble)
TestInfo ts = new TestInfo();
ts.name = "Coyote";
ts.age = 23;
//创建文件流
FileStream fs = new FileStream("c:/DPanFU/test.bin", FileMode.Create);
//二进制方式
BinaryFormatter bf = new BinaryFormatter();
//序列化存储对象
bf.Serialize(fs, ts);
//关闭流
fs.Close();
}
从存取的bin文件的信息我们可以看出,标记为[NonSerialized]的字段的值总是为null