CH13-序列化和反序列化
CH13-序列化和反序列化
本章目标
- 理解序列化和反序列化
- 掌握二进制序列化和反序列化
- 掌握XML序列化和反序列化
本章内容
1、概念
什么是序列化:
通常,我们需要将对象存储要物理存储中,这要可以释放内存,在需要的时候,我们又需要从物理存储中读回并转换回对象。
在此过程中,对象的公共字段和私有字段以及类的名称(包括该类的程序集)都被转换为字节流,然后写入数据流。在以后反序列化该对象时,创建原始对象的精确副本。
序列化:将对象存储到物理存储的过程称为序列化。
反序列化:
反序列化:将序列化对象读回内存的过程是反序列化。
2、序列化实现步骤
序列化一个类最简单的方式是试用如下所示的Serializable属性标记
1
2
3
4
5
6
7
8
9
10
11
12[//标识类可以被序列化 ]
internal class Student
{
public int StudentNo { get; set; }
public string StudentName { get; set; }
public int Age { get; set; }
public void SayHi()
{
Console.WriteLine($"大家好:我叫:{StudentName},学号:{StudentNo},年龄:{Age}");
}
}注意事项:
如果类中有字段不需要被序列化,可以加上[NonSerialized],引特性只能加在字段上面,例如:
1
2
3
4
5
6
7
8
9
10
11
12
13[ ]
internal class Student
{
[ ]
public int StudentNo;
public string StudentName { get; set; }
public int Age { get; set; }
public void SayHi()
{
Console.WriteLine($"大家好:我叫:{StudentName},学号:{StudentNo},年龄:{Age}");
}
}
实现序列化操作
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17using System.Runtime.Serialization.Formatters.Binary;//引入命名空间
static void Main(string[] args)
{
Student student = new Student()
{
StudentNo = 1001,
StudentName = "张三",
Age = 18
};
//1、创建文件流
FileStream fs = new FileStream("student.bin", FileMode.OpenOrCreate);
//2、创建二进制格式器
BinaryFormatter bf = new BinaryFormatter();
//3、实现序列化操作
bf.Serialize(fs, student);
}
3、反序列化实现步骤
实现代码:
1
2
3
4
5
6
7//1、创建文件流
FileStream fs = new FileStream("student.bin", FileMode.OpenOrCreate);
//2、创建二进制格式器
BinaryFormatter bf = new BinaryFormatter();
//3、实现反序列化
Student stu = (Student)bf.Deserialize(fs);
stu.SayHi();实现效果:
4、XML方式实现序列化和反序列化操作
通过XML实现序列化操作
首先,创建要序列化的对象并设置它的公共属性和字段,而且必须确定用以存储XML 流的传输格式(或者作为流,或者作为文件)。例如,如果XML 流必须以永久形式保存,则创建FileStream 对象。当反序列化对象时,传输格式将确定创建流还是文件对象。确定了传输格式之后,就可以根据需要调用Serialize 或Deserialize 方法。
1
2//1、创建文件流
FileStream fs = new FileStream("student2.xml", FileMode.OpenOrCreate);其次,使用该对象的类型构造XmlSerializer。
1
2//2、创建XML序列化格式器
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Student));最后,调用Serialize 方法以生成对象的公共属性和字段的XML 流表示形式或文件表示形式。
1
2//3、实现序列化操作
xmlSerializer.Serialize(fs, student);生成序列化后效果图:
通过XML实现反序列化操作
1
2
3
4
5
6
7//1、创建文件流
FileStream fs = new FileStream("student2.xml", FileMode.OpenOrCreate);
//2、创建XML序列化格式器
XmlSerializer xmlSerializer = new XmlSerializer(typeof(Student));
//3、实现序列化操作
Student stu = (Student)xmlSerializer.Deserialize(fs);
stu.SayHi();
本章总结
- 理解序列化
- 会通过二进制方式实现序列化操作
- 会通过XML方式实现序列化操作
本章作业
- 完善网络电视精灵,将卖票信息通过序列化方式保存
- 完善网络电视精灵,打开程序是,点击 获取最新购票信息,将保存在文件中的卖票信息加载出来
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 广创科技教育-Blog!
评论