ヘッダー
Visual Basic サンプル集
 VB2008対応 VB2010対応 VB2012対応 VB2013対応

DataContractを使用したXMLのシリアライズ・デシリアライズ

WCFで用いられるDataContractのシリアライズ・デシリアライズを自分のプログラムで実行する例。WCFとは異なる方法でXMLをシリアライズするには XMLのシリアライズ・デシリアライズ を参照。

1.DataContractを使用してXMLにシリアライズする例

次の関数は対象のオブジェクトtargetをDataContractを使用してXMLにシリアライズして返す。
この場合「XMLにシリアライズ」とはオブジェクトをXMLとして表現することを指す。


VB2008対応 VB2010対応 VB2012対応 VB2013対応
Public Function Serialize(target As Object) As String

    Using stream As New IO.MemoryStream

        '▼シリアライズ実行
        Dim serializer As New DataContractSerializer(target.GetType)
        serializer.WriteObject(stream, target)

        '▼結果を取得
        Dim result As String = System.Text.Encoding.UTF8.GetString(stream.ToArray())
        Return result

    End Using

End Function

すぐ試せる例

上記関数の使用例。

前提

  • Windows フォーム アプリケーションで作成
  • System.Runtime.Serializationへ参照設定
  • Button1を配置
  • TextBox1を配置
 VB2010対応 VB2012対応 VB2013対応
Imports System.Runtime.Serialization

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim p As New Person
        p.Id = 627
        p.Name = "徳川家康"

        TextBox1.Text = Serialize(p)

    End Sub

    Public Function Serialize(target As Object) As String

        Using stream As New IO.MemoryStream

            '▼シリアライズ実行
            Dim serializer As New DataContractSerializer(target.GetType)
            serializer.WriteObject(stream, target)

            '▼結果を取得
            Dim result As String = System.Text.Encoding.UTF8.GetString(stream.ToArray())
            Return result

        End Using

    End Function

End Class

<DataContract(NameSpace:="http://tekito.de.iiyo/mynamespace")>
Public Class Person

    <DataMember> Public Property Id As Integer
    <DataMember> Public Property Name As String

End Class

この例を実行して得られるXMLは以下の通り。

 
<Person xmlns="http://tekito.de.iiyo/mynamespace" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
    <Id>627</Id>
    <Name>徳川家康</Name>
</Person>
  • 上記は読みやすいように改行・インデントをつけて整形している。実際には改行やインデントは付かない形になる。
  • プログラムでXMLを整形する例は XMLを整形する を参照。

2.DataContractを使用してXMLをデシリアライズする例

次の関数はシリアライズで作成したXMLを読み込んでオブジェクトを作成する。

VB2008対応 VB2010対応 VB2012対応 VB2013対応
Public Function Deserialize(Of T)(xml As String) As T

    Dim result As T
    Dim serializer As New DataContractSerializer(GetType(T))

    Using stream As New IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(xml))
        result = DirectCast(serializer.ReadObject(stream), T)
    End Using

    Return result

End Function

すぐ試せる例

上記関数の使用例。

前提

  • Windows フォーム アプリケーションで作成
  • System.Runtime.Serializationへ参照設定
  • Button1を配置
  • TextBox1を配置
VB2008対応 VB2010対応 VB2012対応 VB2013対応
Imports System.Runtime.Serialization

Public Class Form1

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim xml As String = "<Person xmlns=""http://tekito.de.iiyo/mynamespace"" xmlns:i=""http://www.w3.org/2001/XMLSchema-instance""><Id>627</Id><Name>徳川家康</Name></Person>"
        Dim p As Person

        p = Deserialize(Of Person)(xml)

        MsgBox(p.Name)

    End Sub

    Public Function Deserialize(Of T)(xml As String) As T

        Dim result As T
        Dim serializer As New DataContractSerializer(GetType(T))

        Using stream As New IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(xml))
            result = DirectCast(serializer.ReadObject(stream), T)
        End Using

        Return result

    End Function

End Class

<DataContract(NameSpace:="http://tekito.de.iiyo/mynamespace")>
Public Class Person

    <DataMember> Public Property Id As Integer
    <DataMember> Public Property Name As String

End Class

参考

XMLのシリアライズ・デシリアライズ

DataContractを使用しないXMLのシリアライズ・デシリアライズのサンプル

DataContractSerializerクラス

MSDNライブラリのDataContractSerializerクラスの説明。