【IT168技术文档】
一旦将类型配置为参与.NET序列化,接下来就是选择当持久化对象图时使用哪种格式。在.NET 2.0中,有以下三种选择:
l BinaryFormatter
l SoapFormatter
l XmlSerializer
BinaryFormatter类型使用紧凑的二进制格式将对象图序列化为一个流,这个类型在System. Runtime.Serialization.Formatters.Binary命名空间中定义,后者是mscorlib.dll的一部分。因此,为了使用二进制序列化对象,需要指定下面的C# using指令:
SoapFormatter类型将对象图表示为一个SOAP消息。该类型定义在System.Runtime. Serialization. Formatters.Soap命名空间中,该命名空间被定义在一个程序集内。因此,要格式化对象图为一个SOAP消息,必须设定引用指向System.Runtime.Serialization.Formatters.Soap.dll并指定下列的C# using指令:// 获取对mscorlib.dll中的BinaryFormatter的访问。 Using System.Runtime.Serialization.Formatters.Binary;
最后,如果希望将对象图持久化为一个XML文档,需要指定使用System.Xml.Serialization命名空间,它也是定义在一个程序集中:System.Xml.dll。幸运的是,所有的Visual Studio 2005项目模板自动引用了System.Xml.dll,因此只需要使用下列命名空间:// 必须引用System.Runtime.Serialization.Formatters.Soap.dll! using System.Runtime.Serialization.Formatters.Soap;
IFormatter和IRemotingFormatting接口// 定义在System.Xml.dll。 using System.Xml.Serialization;
不管选择哪种格式来序列化对象,都要知道它们直接派生于System.Object,因此并不从一个以序列化为中心的基类共享一组公共的成员。但是,BinaryFormatter和SoapFormatter类型通过实现IFormatter和IRemotingFormattter接口(XmlSerializer两者都不实现)都支持公共的成员。
System.Runtime.Serialization.IFormatter定义了核心的Serialize()和Deserialize()方法,Serialize()和Deserialize()方法将做复杂的工作完成对象图和指定流之间的转换。除了这些成员,IFormatter还定义了一些在后台使用的实现类型的属性:
public interface IFormatter { SerializationBinder Binder { get; set; } StreamingContext Context { get; set; } ISurrogateSelector SurrogateSelector { get; set; } object Deserialize(System.IO.Stream serializationStream); void Serialize(System.IO.Stream serializationStream, object graph); }