串行化XML(二)

由 ** 串行化 XML( 一 ) ** 可以知道 XML 的序列化( Serialization )。它是这样一个过程:得到一个对象,把对象转换为一个 XML文档,并且保存它以供使用,或者把它传到网络上其他地方以供使用。在 .NET 中, XML serialization 通过检查类的属性是否被标志为 read/write 来工作。只要有其中一个属性,该类的值就会被取出并插入到一个 XML文档里去。反序列化( De-serialization )则是一个相反的过程。 ** **

****

将一个对象串行化为 xml 后,再并行化,使其还原为原来的对象有时,在并行的 xml 当中可能存在意外的 xml 节点。

如果不处理这些意外的 xml 的节点, XmlSerializer 将忽略这些意外的节点,如果要处理这些意外节点,可以使用 XmlSerializer 的一下事件进行处理: ** **

¨ ** UnknownNode **

¨ ** UnknownElement **

¨ ** UnknownAttribute **

¨ ** UnreferencedObject **

现在将 book.xml 的格式更改为:

1<book **="" **id="001" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
2<bookid>1</bookid>
3<bookname> 数学  </bookname>
4
5** <exception>Some Text</exception> **
6
7</book>

我们增加了一些意外的节点、属性,然后执行并行化过程:

Dim serializer As New Xml.Serialization.XmlSerializer(GetType(bookShop))

** AddHandler serializer.UnknownAttribute, AddressOf myUnknownAttribute **

** AddHandler serializer.UnknownElement, AddressOf myUnknownElement **

AddHandler serializer.UnknownNode, AddressOf myUnknownNode

Dim reader As System.IO.StreamReader = New System.IO.StreamReader("E:\serializer\book.xml")

Dim a As bookShop = CType(serializer.Deserialize(reader), bookShop)

reader.Close()

Console.WriteLine("BookShop Name:" & a.BookName)

Console.WriteLine("BookShop ID:" & a.BookID)

Console.WriteLine("Print Enter to Exit.............")

Console.ReadLine()

我们同样增加了意外节点、属性的处理代码,执行结果为:

这样我们就可以查看那些意外的节点、属性的信息了。

另外,我们还可以灵活的控制串行化 xml 的格式 , 这样可以很方便的与外部应用程序进行交换对象。我们可以在类中加入 .NET Framework 属性来控制串行化 xml 的格式。

Imports System.Xml

Imports System.Xml.Serialization

**

 1<xmlroot(elementname:="root_book", )="" namespace:="URI:MylocalURI"> ** _ 
 2
 3Public Class Book 
 4
 5** <xmlelement(elementname:="book_id", )="" namespace:="URI:MylocalURI"> ** Public BookID As Integer 
 6
 7** <xmlattributeattribute(attributename:="name")> ** _ 
 8
 9Public BookName As String 
10
11** <xmltext()> _  **
12
13Public test_Text As String 
14
15** <xmlignore()> _  **
16
17Public IgnoreText As String 
18
19‘IgnoreText  将不被串行化 
20
21End Class 
22
23Module Serialization 
24
25<stathread()> _ 
26
27Public Sub main() 
28
29Dim book As New book 
30
31book.BookID = 1 
32
33book.BookName = "  数学  " 
34
35book.test_Text = "Some Text" 
36
37book.IgnoreText = "IgnoreText" 
38
39Dim serializer As New Xml.Serialization.XmlSerializer(GetType(book)) 
40
41Dim writer As System.IO.StreamWriter = New System.IO.StreamWriter("E:\serializer\book.xml") 
42
43serializer.Serialize(writer, book) 
44
45writer.Close() 
46
47End Sub 
48
49End Module 
50
51则生成的  XML  格式为  : 
52
53<?xml version="1.0" encoding="utf-8"?>
54
55&lt; Root_Book  xmlns:xsd  ="  http://www.w3.org/2001/XMLSchema  "  xmlns:xsi  ="  http://www.w3.org/2001/XMLSchema-instance  "  Name  ="  数学  "  xmlns  ="  URI:MylocalURI  "&gt;
56
57&lt; Book_ID  &gt; 1  
58
59Some Text 
60
61</stathread()></xmlignore()></xmltext()></xmlattributeattribute(attributename:="name")></xmlelement(elementname:="book_id",></xmlroot(elementname:="root_book",>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus