Visual Basic サンプル集 |
![]() ![]() ![]() ![]() |
Visual Basic 中学校 > Visual Basic サンプル集 > Visual Basic サンプル集目次 >
DataContractを使用したXMLのシリアライズ・デシリアライズ
WCFで用いられるDataContractのシリアライズ・デシリアライズを自分のプログラムで実行する例。WCFとは異なる方法でXMLをシリアライズするには XMLのシリアライズ・デシリアライズ を参照。
1.DataContractを使用してXMLにシリアライズする例
次の関数は対象のオブジェクトtargetをDataContractを使用してXMLにシリアライズして返す。この場合「XMLにシリアライズ」とはオブジェクトをXMLとして表現することを指す。




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を配置



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を読み込んでオブジェクトを作成する。



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を配置




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 |
参考
DataContractを使用しないXMLのシリアライズ・デシリアライズのサンプル
MSDNライブラリのDataContractSerializerクラスの説明。