一、介绍
在数据的保存中,我们经常需要保存很多东西,但是有些时候需要保存一个很复杂的类,
如果用简单存储单个数据的办法就很难保存,这时我们就需要对这个类进行序列化,也就是说,
序列化是用来保存一个类的。
二、需求
1、我们有一个类(为了方便看清楚,这个类弄得很简单),
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private string classes;
public string Classes
{
get { return classes; }
set { classes = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
}
跟java一样,需要序列化一个类的时候,java中需要实现Serializable接口,.Net也
需要做类似的事,不过写法上跟java就完全不一样了。
写法:
[Serializable]
public class Person
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
private string classes;
public string Classes
{
get { return classes; }
set { classes = value; }
}
private int _age;
public int Age
{
get { return _age; }
set { _age = value; }
}
}
得java那样的设计更好一些。
2、序列化操作
①首先创建实例化一个类,并且赋值:
//要将p这个对象 传输给对方电脑
Person p = new Person();
p.Name = "豆豆";
p.Classes = "软件一班";
p.Age = 21;
②创建一个输出流
FileStream fsWrite = new FileStream(@"C:\Users\jztx\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Write);
③开始序列化
//开始序列化对象
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fsWrite, p);
这样,我们的序列化操作就完成了。桌面上会出现一个文件,当然,打开里面是乱码。
3、反序列化操作
①创建一个输入流
FileStream fsRead = new FileStream(@"C:\Users\jztx\Desktop\111.txt", FileMode.OpenOrCreate, FileAccess.Read);
②反序列化操作
BinaryFormatter bf = new BinaryFormatter();
Person p = (Person)bf.Deserialize(fsRead);
fsRead.Close();
③检验输出
Console.WriteLine(p.Name);
Console.WriteLine(p.Age);
Console.WriteLine(p.Classes);
Console.ReadKey();
输出结果完全符合我们的要求。