串行化XML(二)

串行化XML() 可以知道XML的序列化(Serialization)。它是這樣一個過程:得到一個對象,把對象轉換爲一個XML文檔,並且保存它以供使用,或者把它傳到網絡上其他地方以供使用。在.NET中,XML serialization通過檢查類的屬性是否被標誌爲read/write來工作。只要有其中一個屬性,該類的值就會被取出並插入到一個XML文檔裏去。反序列化(De-serialization)則是一個相反的過程。<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 <?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" />

將一個對象串行化爲xml後,再並行化,使其還原爲原來的對象有時,在並行的xml當中可能存在意外的xml節點。

如果不處理這些意外的xml 的節點,XmlSerializer將忽略這些意外的節點,如果要處理這些意外節點,可以使用XmlSerializer的一下事件進行處理:

¨         UnknownNode

¨         UnknownElement 

¨         UnknownAttribute    

¨         UnreferencedObject

現在將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>數學</BookName>

       <Exception>Some Text</Exception>

</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

<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 = "數學"

        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="數學" xmlns="URI:MylocalURI">

       <Book_ID>1</Book_ID>

Some Text

</Root_Book>

 

    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章