C#对象串行化与反串行化详解
"本文主要介绍了C#中的序列化与反序列化操作,通过使用`System.SerializableAttribute`特性标记类,可以实现对象的状态保存与恢复。" 在编程领域,序列化是一个重要的概念,它允许我们将对象的状态转换为可以存储或传输的数据格式。在C#中,我们可以使用`System.SerializableAttribute`特性来标记一个类,使其实例可以被序列化和反序列化。这样做可以用于持久化对象的状态,即把对象的状态保存到硬盘上,以便之后能够重新加载和恢复。 例如,下面的代码展示了如何定义一个可序列化的`Person`类: ```csharp [Serializable] public class Person { public Person() { } public int Age; public int WeightInPounds; } ``` 在上面的代码中,`[Serializable]`是C#的一个特性,表明这个类的实例可以被序列化。一旦类被标记为可序列化,我们就可以使用`BinaryFormatter`类来进行序列化和反序列化操作。 序列化的过程如下: ```csharp Person me = new Person(); me.Age = 34; me.WeightInPounds = 200; Stream stream = File.Open("Me.dat", FileMode.Create); BinaryFormatter bf = new BinaryFormatter(); bf.Serialize(stream, me); stream.Close(); ``` 这段代码首先创建了一个`Person`对象,设置了其属性值,然后打开一个名为"Me.dat"的文件流,创建一个`BinaryFormatter`实例,使用`Serialize`方法将对象写入文件流中,最后关闭流。 反序列化则是将存储在文件中的数据恢复为对象的过程: ```csharp Stream stream = File.Open("Me.dat", FileMode.Open); BinaryFormatter bf = new BinaryFormatter(); object o = bf.Deserialize(stream); Person p = o as Person; if (p != null) { Console.WriteLine("DeSerializedPerson aged: {0}, weight: {1}", p.Age, p.WeightInPounds); } stream.Close(); ``` 这里,我们打开同一个文件,使用`Deserialize`方法读取数据并创建一个新的`Person`对象。如果反序列化成功,我们就能访问到对象的属性值。 有时,我们可能希望只序列化对象的部分字段。这时,可以使用`[NonSerialized]`特性来标记不想序列化的成员。例如: ```csharp [Serializable] public class Person { public Person() { } public int Age; [NonSerialized] public int WeightInPounds; } ``` 在这个修改后的`Person`类中,`WeightInPounds`字段不会被序列化。 总结来说,C#的序列化和反序列化是通过`System.SerializableAttribute`和相关的序列化类(如`BinaryFormatter`)实现的,它使得对象的状态可以在程序运行的不同阶段或者不同系统之间保存和恢复。通过适当的标记和控制,我们可以灵活地决定哪些成员参与序列化过程。这对于数据持久化、网络通信以及状态保存等场景非常有用。
下载后可阅读完整内容,剩余8页未读,立即下载
- 粉丝: 8
- 资源: 6
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 李兴华Java基础教程:从入门到精通
- U盘与硬盘启动安装教程:从菜鸟到专家
- C++面试宝典:动态内存管理与继承解析
- C++ STL源码深度解析:专家级剖析与关键技术
- C/C++调用DOS命令实战指南
- 神经网络补偿的多传感器航迹融合技术
- GIS中的大地坐标系与椭球体解析
- 海思Hi3515 H.264编解码处理器用户手册
- Oracle基础练习题与解答
- 谷歌地球3D建筑筛选新流程详解
- CFO与CIO携手:数据管理与企业增值的战略
- Eclipse IDE基础教程:从入门到精通
- Shell脚本专家宝典:全面学习与资源指南
- Tomcat安装指南:附带JDK配置步骤
- NA3003A电子水准仪数据格式解析与转换研究
- 自动化专业英语词汇精华:必备术语集锦