#眉標=.NET Namespace專欄 #副標=.System.Xml.Serialization #大標=XML序列化和Web service #作者=文/彭靖灝 ==========程式========== 程式1 Public Class Book _ Public ISBN As String _ Public TitleName As String End Class ==========程式========== ==========程式========== 程式2 System.Xml Bible ==========程式========== ==========程式========== 程式3 Private Sub btnGenSerialize_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnGenSerialize.Click Dim myBook As New Book myBook.ISBN = "337-337-3337" myBook.TitleName = "System.Xml Bible" Dim mySerializer As New XmlSerializer(GetType(Book)) Dim writer As New StringWriter mySerializer.Serialize(writer, myBook) txtResult.Text = writer.ToString End Sub ==========程式========== ==========程式========== 程式4 _ Public Class Book _ Public ISBN As String _ Public TitleName As String End Class ==========程式========== ==========程式========== 程式5 System.Xml Bible ==========程式========== ==========程式========== 程式6 Private Sub btnGenSerializerNS_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles btnGenSerializerNS.Click Dim myBook As New Book myBook.ISBN = "337-337-3337" myBook.TitleName = "System.Xml Bible" Dim mySerializer As New XmlSerializer(GetType(Book)) Dim writer As New StringWriter Dim myNamespaces As New XmlSerializerNamespaces myNamespaces.Add("std", "http://standard/ISBN") myNamespaces.Add("bk", "http://intenology.com/Book") mySerializer.Serialize(writer, myBook, myNamespaces) txtResult.Text = writer.ToString End Sub ==========程式========== ==========程式========== 程式7 System.Xml Bible ==========程式========== ==========程式========== xsd <.xsd檔案> /classes /l:vb ==========程式========== ==========程式========== 程式8 Option Strict Off Option Explicit On Imports System.Xml.Serialization ' '這個原始程式碼是由 xsd,Version=1.1.4322.2032 自動產生。 ' ' _ Public Class Books ' _ Public Book() As BooksBook End Class ' _ Public Class BooksBook ' Public Name As String ' Public Price As Integer ' _ Public ISBN As String End Class ==========程式========== ==========程式========== 程式9 Private Sub btnXSDSerialize_Click( _ ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles btnXSDSerialize.Click Dim myBooks As New Books Dim myBookArray(2) As BooksBook Dim myBook As New BooksBook With myBook .ISBN = "337-337-3337" .Name = "System.Xml Bible" .Price = 3000 End With myBookArray(0) = myBook myBook = New BooksBook With myBook .ISBN = "337-337-3247" .Name = ".NET Namespace Guide" .Price = 280 End With myBookArray(1) = myBook With myBook .ISBN = "337-337-2738" .Name = "Microsoft Visual Studio" .Price = 400 End With myBookArray(2) = myBook myBooks.Book = myBookArray Dim mySerializer As New XmlSerializer(GetType(Books)) Dim writer As New StringWriter mySerializer.Serialize(writer, myBooks) txtResult.Text = writer.ToString End Sub ==========程式========== ==========程式========== 程式10 System.Xml Bible 3000 Microsoft Visual Studio 400 Microsoft Visual Studio 400 ==========程式========== ==========程式========== 程式11 Imports System.Xml.Serialization _ Public Class Orders Public Books() As Book End Class _ Public Class Book _ Public ISBN As String _ Public TitleName As String End Class Public Class ExpandedBook Inherits Book _ Public NewEdition As Boolean End Class ==========程式========== ==========程式========== 程式12 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim b As New ExpandedBook Dim myOrder As New Orders b.ISBN = "sss" b.NewEdition = True b.TitleName = "test" myOrder.Books = New ExpandedBook() {b} Dim mySerializer As New XmlSerializer(GetType(Orders)) Dim writer As New StringWriter Dim myNamespaces As New XmlSerializerNamespaces myNamespaces.Add("std", "http://standard/ISBN") myNamespaces.Add("bk", "http://intenology.com/Book") mySerializer.Serialize(writer, myOrder, myNamespaces) txtResult.Text = writer.ToString End Sub ==========程式========== ==========程式========== 程式13 Public Sub SerializeObjectNS() Dim attrs As XmlAttributes = New XmlAttributes Dim myNamespaces As New XmlSerializerNamespaces ' 建立前置詞和命名空間的對應 myNamespaces.Add("bk", "http://intenology.com/Book") myNamespaces.Add("std", "http://standard/ISBN") ' 建立元素宣告屬性 Dim attr As XmlElementAttribute = _ New XmlElementAttribute attr.ElementName = "NewBook" attr.Type = GetType(ExpandedBook) ' 加入屬性群組中 attrs.XmlElements.Add(attr) ' 將宣告屬性覆寫關係加入覆寫群組中 Dim attrOverrides As XmlAttributeOverrides = _ New XmlAttributeOverrides attrOverrides.Add(GetType(Orders), "Books", attrs) ' 建立 XmlSerializer 並搭配 XmlAttributeOverrides Dim s As XmlSerializer = _ New XmlSerializer(GetType(Orders), attrOverrides) Dim writer As New StringWriter Dim myOrders As Orders = New Orders Dim b As ExpandedBook = New ExpandedBook b.ISBN = "123456789" b.NewEdition = True myOrders.Books = New ExpandedBook() {b} s.Serialize(writer, myOrders, myNamespaces) txtResult.Text = writer.ToString writer.Close() End Sub ==========程式========== ==========程式========== 程式14 ==========程式========== ==========程式========== 程式15 _ Public Function GetOrder() As BookComponent.Orders Dim myOrders As Orders = New Orders ' Creates an object of the derived type. Try Dim b As Book = New Book b.ISBN = "123456789" b.TitleName = "System.Xml Bible" myOrders.Books = New Book() {b} Catch ex As Exception Debug.WriteLine(ex.Message) End Try Return myOrders End Function ==========程式========== ==========程式========== 程式16 _ Public Class Book _ Public ISBN As String _ Public TitleName As String End Class ==========程式========== ==========程式========== 程式17 _ Public Function GetBookEncoded() As BookComponent.Book Dim myBook As New Book ' Creates an object of the derived type. Try myBook.ISBN = "123456789" myBook.TitleName = "System.Xml Bible" Catch ex As Exception Debug.WriteLine(ex.Message) End Try Return myBook End Function _ Public Function GetBookLiteral() As BookComponent.Book Dim myBook As New Book ' Creates an object of the derived type. Try myBook.ISBN = "123456789" myBook.TitleName = "System.Xml Bible" Catch ex As Exception Debug.WriteLine(ex.Message) End Try Return myBook End Function ==========程式==========