对象序列化在应聘过程中并不常见,但是在实际应用中却是很常见的。本节将列举3个比较典型的问题,以扩充.Net的相关知识面。
面试例题20:编写对象序列化的程序。
考点:掌握对象序列化的基本方法,理解序列化中不同格式的区别。
出现频率:★★★
解答
在Visual Studio 2005/Visual Studio 2008中创建一个C#的Windows窗体应用程序项目,并将其项目命名为MultiSerialize。程序使用5个"TextBox"控件分别接受用户的输入,其中上面4个控件用于传递相应的值给某个对象,而下面的"TextBox"控件用于存储文件名。当用户单击"TextBox"操作下面的3个按钮控件中任意一个时,程序将根据用户输入值初始化一组对象,并将对象图进行相应格式的序列化。在Visual Studio 2005/ Visual Studio 2008的"Form1.cs[设计]"视图中创建基本的窗体布局和控件,控件的命名如图7.43所示。
|
|
| 图7.43 对象序列化窗体控件的布局及命名 |
|
|
| 图7.44 引用外部程序集 |
分别双击Form1的3个按钮控件,编写相应的"Click"事件处理方法。MultiSerialize项目的Form1.cs如代码7.25所示。
代码7.25 序列化对象:Form1.cs
using System;
namespace MultiSerialize
private void XmlBtn_Click(object sender, EventArgs e)
private void BinBtn_Click(object sender, EventArgs e)
private void SoapBtn_Click(object sender, EventArgs e)
//定义PersonName类,并标记可序列化特性
//定义PersonOther类,并标记可序列化特性 |
程序运行时,可以向前4个"TextBox"控件填入某人的基本资料,然后在Name属性为"FileName"控件中填入"Person.dat",即输出文件的文件名,运行结果如图7.45所示。
当用户单击"二进制格式"按钮后,程序将根据用户输入的值创建并初始化1个PersonName类的对象。程序使用二进制格式序列化该对象并输出到程序集相同目录下的Person.dat文件中,当完成了这些工作,程序将使用信息对话框提示序列化操作成功,运行结果如图7.46所示。
|
|
| 图7.45 输入多个信息 |
|
|
| (点击查看大图)图7.46 以二进制格式序列化 |
|
|
| (点击查看大图)图7.47 "Person.dat"文件内容 |
|
|
| (点击查看大图)图7.48 "Person.soap"文件内容 |
|
|
| (点击查看大图)图7.49 "Person.xml"文件内容 |
说明:项目所生成的程序集路径为"项目路径\bin\debug"。
如果修改程序的代码,可知二进制格式序列化的文件除了保存程序集的信息,还保存私有字段及公共字段的数据SOAP格式和XML格式仅保存对象的公共字段及公共属性,但是这两种格式可以应用于更大范围的平台、应用程序框架中。并且XML格式所序列化的对象数据包含了被标记为[NonSerialized]特性的字段。
说明:本题程序采用IFormatter接口实现多态的应用,使二进制格式化和SOAP格式化操作重用了部分的代码。程序中使用IFormatter接口必须导入其命名空间,即System.Runtime.Serialization。