技术开发 频道

选择序列化格式化程序


【IT168技术文档】

  一旦将类型配置为参与.NET序列化,接下来就是选择当持久化对象图时使用哪种格式。在.NET 2.0中,有以下三种选择:

  l BinaryFormatter

  l SoapFormatter

  l XmlSerializer

  BinaryFormatter类型使用紧凑的二进制格式将对象图序列化为一个流,这个类型在System. Runtime.Serialization.Formatters.Binary命名空间中定义,后者是mscorlib.dll的一部分。因此,为了使用二进制序列化对象,需要指定下面的C# using指令:
// 获取对mscorlib.dll中的BinaryFormatter的访问。 Using System.Runtime.Serialization.Formatters.Binary;
  SoapFormatter类型将对象图表示为一个SOAP消息。该类型定义在System.Runtime. Serialization. Formatters.Soap命名空间中,该命名空间被定义在一个程序集内。因此,要格式化对象图为一个SOAP消息,必须设定引用指向System.Runtime.Serialization.Formatters.Soap.dll并指定下列的C# using指令:
// 必须引用System.Runtime.Serialization.Formatters.Soap.dll! using System.Runtime.Serialization.Formatters.Soap;
  最后,如果希望将对象图持久化为一个XML文档,需要指定使用System.Xml.Serialization命名空间,它也是定义在一个程序集中:System.Xml.dll。幸运的是,所有的Visual Studio 2005项目模板自动引用了System.Xml.dll,因此只需要使用下列命名空间:
// 定义在System.Xml.dll。 using System.Xml.Serialization;
  IFormatter和IRemotingFormatting接口

  不管选择哪种格式来序列化对象,都要知道它们直接派生于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); }
0
相关文章