.NET Framework 对创建分布式应用程序和服务提供了广泛的、可扩展的支持。当创建一个分布式系统时,一个必须要解决的问题就是如何获得从系统的一部分到另一部分的对象。为了满足这一机制的需求, .NET Framework 时实现了一种基于 XML 的串行化机制。这样便可以将一个对象串行化为 XML 格式,从而它的所有公共域和属性都将以 XML 写入,然后可以将这个 XML 发送到任何地方,接收方则可以并行化该 XML 数据,从而在内存中重建改对象。这样可以很方便的解决在分布式系统中对象交换的问题。
串行化机制的可定制行很强,因此可以很灵活的控制对象串行化为 XML 的格式(如:可以用 XSD 模式来定义在串行化过程中产生的 XML 文档结构) 。
除了串行化为 XML 以外还有 BinaryFormatter 和 SoapFormatter 格式化类。
s BinaryFormatter 将对象串行化为二进制格式。这样可以很高效率的传输到远程应用程序。
s SoapFormatter 将对象串行化为简单对象访问协议( SOAP )格式。
SOAP 是一种基于 XML 的定义方法调用参数以及返回值符号。当将对象参数传递到一个 Web 服务方法或从一个 Web 服务方法中返回对象时, SoapFormatter 将对象串行化为 SOAP 格式用于传输, .NET 为我们提供了一种简单的方法,以存储一个对象的状态。
总之, .NET 串行化机制可以在 n 层应用系统中,将对象串行化为 XML 格式来在系统各层之间传递对象数据。
要对对象进行 XML 串行化,首先定义一个类:
** Public ** Class Book
Public BookID As Integer
Public BookName As String
End Class
这个类必须是一个公共类( Public ),如果试图串行化一个非公共类, XMLSerializer 将在运行时抛出一个异常。在类的内部将只串行化那些公有成员,非公有成员将不被串行化为 XML 。如果必须要串行化非公有成员,可以使用 BinaryFormatter 或 SoapFormatter 。
' 实例化 Book 类
Dim book As New book
book.BookID = 1
book.BookName = " 数学 "
' 创建一个 xml 串行化器
Dim serializer As New Xml.Serialization.XmlSerializer(GetType(book))
Dim writer As System.IO.StreamWriter = New System.IO.StreamWriter("E:\serializer\book.xml")
' 进行串行化
serializer.Serialize(writer, book)
writer.Close()
这样,便可以将对象串行化为一个 XML 文件,格式为:
< Book xmlns:xsd =" http://www.w3.org/2001/XMLSchema " xmlns:xsi =" http://www.w3.org/2001/XMLSchema-instance ">
< BookID > 1 < BookName > 数学 如果有很多类需要进行 xml 序列化,则可以创建一个 XmlSerializer 对象数组。
** Public ** Class Book
Public BookID As Integer
Public BookName As String
End Class
** Public ** Class Student
Public StudentID As Integer
Public StudentName As String
End Class
** Public ** Class Shop
Public ShopID As Integer
Public ShopName As String
End Class
Dim types(3) As Type
types(0) = GetType(book)
types(1) = GetType(Student)
types(2) = GetType(Shop)
Dim serializers(3) As Xml.Serialization.XmlSerializer
serializers = Xml.Serialization.XmlSerializer. FromTypes (types)
Dim writer As System.IO.StreamWriter = New System.IO.StreamWriter("E:\serializer\book.xml")
FromTypes() 方法返回一个 XmlSerializer 对象数组。所生成的 xml 文档元素映射到类名称,其子元素映射到类的公共域,另外还有 XSD 命名空间。
将串行化为 xml 的对象复原,则需要并行化 xml 数据对象,调用 XmlSerializer 对象的 Deserialize 方法,然后按通常的方法使用该对象。
Dim serializer As New Xml.Serialization.XmlSerializer(GetType(book))
Dim reader As System.IO.StreamReader = New System.IO.StreamReader("E:\serializer\book.xml")
Dim a As book = CType(serializer.Deserialize(reader), book)
reader.Close()
Console.WriteLine("Book ID:" & a.BookID)
Console.WriteLine("Book Name:" & a.BookName)
Console.WriteLine("Print Enter to Exit")
Console.ReadLine()
运行情况如下: