串行化XML(二)
發(fā)表時間:2024-06-22 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]由 串行化XML(一) 可以知道XML的序列化(Serialization)。它是這樣一個過程:得到一個對象,把對象轉(zhuǎn)換為一個XML文檔,并且保存它以供使用,或者把它傳到網(wǎng)絡上其他地方以供使用。在.NET中,XML serialization通過檢查類的屬性是否被標志為read/write來工作。...
由 串行化XML(一) 可以知道XML的序列化(Serialization)。它是這樣一個過程:得到一個對象,把對象轉(zhuǎn)換為一個XML文檔,并且保存它以供使用,或者把它傳到網(wǎng)絡上其他地方以供使用。在.NET中,XML serialization通過檢查類的屬性是否被標志為read/write來工作。只要有其中一個屬性,該類的值就會被取出并插入到一個XML文檔里去。反序列化(De-serialization)則是一個相反的過程。
將一個對象串行化為xml后,再并行化,使其還原為原來的對象有時,在并行的xml當中可能存在意外的xml節(jié)點。
如果不處理這些意外的xml 的節(jié)點,XmlSerializer將忽略這些意外的節(jié)點,如果要處理這些意外節(jié)點,可以使用XmlSerializer的一下事件進行處理:
¨ UnknownNode
¨ UnknownElement
¨ UnknownAttribute
¨ UnreferencedObject
現(xiàn)在將book.xml的格式更改為:
<?xml version="1.0" encoding="utf-8"?>
<Book id="001" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<BookID>1</BookID>
<BookName>數(shù)學</BookName>
<Exception>Some Text</Exception>
</Book>
我們增加了一些意外的節(jié)點、屬性,然后執(zhí)行并行化過程:
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()
我們同樣增加了意外節(jié)點、屬性的處理代碼,執(zhí)行結(jié)果為:
這樣我們就可以查看那些意外的節(jié)點、屬性的信息了。
另外,我們還可以靈活的控制串行化xml 的格式,這樣可以很方便的與外部應用程序進行交換對象。我們可以在類中加入.NET Framework屬性來控制串行化xml 的格式。
Imports System.Xml
Imports System.Xml.Serialization
<XmlRoot(elementname:="Root_Book", namespace:="URI:MylocalURI")> _
Public Class Book
<XmlElement(elementname:="Book_ID", namespace:="URI:MylocalURI")> Public BookID As Integer
<XmlAttributeAttribute(AttributeName:="Name")> _
Public BookName As String
<XmlText()> _
Public test_Text As String
<XmlIgnore()> _
Public IgnoreText As String
‘IgnoreText 將不被串行化
End Class
Module Serialization
<STAThread()> _
Public Sub main()
Dim book As New book
book.BookID = 1
book.BookName = "數(shù)學"
book.test_Text = "Some Text"
book.IgnoreText = "IgnoreText"
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()
End Sub
End Module
則生成的XML格式為:
<?xml version="1.0" encoding="utf-8"?>
<Root_Book xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" Name="數(shù)學" xmlns="URI:MylocalURI">
<Book_ID>1</Book_ID>
Some Text
</Root_Book>