对象的序列化就是将该对象写入一个流中,如文件或套接字。也可以执行其逆过程:从流中读取对象,对对象进行反序列化。
这样可以把对象的数据保存在本地文件中,或者传送到网络上。
System.Xml.Serialization名称空间包含的类和接口支持把对象序列化到XML,或者把XML反序列化到对象口要把对象序列化到文档或流中,可以使用XmISerializer类。、
XmlSerializer 类
FilmOrder类:
Public Class FilmOrder
Public Name As String
Public FilmId As Integer
Public Quantity As Integer
Public Sub New()
End Sub
Public Sub New(ByVal name As String, _
ByVal filmID As Integer, _
ByVal quatity As Integer)
Me.Name = name
Me.FilmId = filmID
Me.Quantity = quatity
End Sub
End Class
控制台应用程序:
Imports System.Xml.Serialization
Module Module1
Sub Main()
‘创建一个XmlSerializer实例,并在其构造函数中指定需要序列化的对象及其类型:
Dim serialize As XmlSerializer = New XmlSerializer(GetType(FilmOrder))
’创建一个该类型的实例,并作为一个参数传递到XmISerializer的构造函数中。在比较复杂的应用程序中,可能需要使用客户端、数据库或其他数据源提供的数据创建这个实例:
Dim MyFilmOrder As FilmOrder = New FilmOrder("Greese", 101, 10)
‘调用XmISerializer实例的Serialize方法,指定要序列化的对象写入哪个流(这里是Console;Out,显示在控制台窗口中.)以及要序列化的对象:
serialize.Serialize(Console.Out, MyFilmOrder)
Console.WriteLine()
Console.Read()
End Sub
End Module
运行这个模块,将生成下面的内容:
<?xml version=”l . 0 " encoding="IBM437" ?>
<FilmOrdar xmlns : xsi = "http : //WWW.w3 .org/2001/XMLSchema-instance"
xmlns : xsd="http : //www.w3 . Org/20 0l/XMLSchema">
<Name>Grease</Name>
<Filmld>101</Filmld>
<Quantity>10</Quantity>
</FilmOrder>
这个输出结果说明了Serialize方法在序列化一个对象时所采取的默认方式:
- 每个被序列化的对象都表示为一个与类同名的元素,在本例中是FilmOrder。
- 序列化对象的每个数据成员都包含在以该数据成员命名的元素中。在本例中分别为Name、Filmld年口Quantity。
其他生成的内容包括:
- XML的具体版本——在本例中是1.00
- 使用的编码方式一在本例中是IBM4370
- 用于描述序列化对象的架构——在本例中XML架构规范定义了两个模式http://www.w3.org/2001fXMLSchema- instance和http://www.w3.org/2001/XMLSchema.
Serialize方法的第一个参数被重写,使之能够把XML序列化到文件(文件名用String类型指定)、Stream、TextWriter或者XmIWriter中。当序列化到Stream、TextWriter或XmIWriter时,Serialize方法的第3个参数是有效的。这个参数的类型是XmISerializerNamespaces,用于指定名称空间的列表,以限定生成的XML文档中使用的名称。