方法は3種類あります。
- System.Xml.Serialization.XmlSerializerクラスを使用する方法
- System.Runtime.Serialization.Formatters.Soap.SoapFormatterクラスを使用する方法
- System.Runtime.Serialization.Formatters.Binary.BinaryFormatter クラスを使用する方法
XmlSerializerクラスはオブジェクトをXMLファイルに保存復元できます。
私が良く使うのは設定ファイルなどをExcelで記述し、ExcelからXMLに出力します。
そのXMLファイルを読み込んでオブジェクトに復元しアプリ内で使用したりしています。
SoapFormatterクラスはオブジェクトをSOAP仕様に従ってXMLファイルに保存復元できます。
Webサービスとデータをやり取りする場合に使用しています。
BinaryFormatterクラスはオブジェクトをバイナリファイルに保存復元できます。
ユーザーに簡単に変更されたくない場合などに使用しています。
参考URL
DOBON.NETN オブジェクトの内容をバイナリファイルに保存する
DOBON.NETN オブジェクトの内容をファイルに保存、復元する
@IT 連載 .NETで簡単XML
伊勢的新常識 XmlSerializer について
XmlSerializerクラスを使用してオブジェクトをXMLファイルに保存・復元する
System.Xml.Serialization.XmlSerializerクラスを使用しオブジェクトをXMLファイルに保存・復元します。
基本的にクラスにSerializable属性をつけるだけでシリアライズ・デシリアライズ可能です。
シリアライズしたくないプロパティにはXmlIgnore属性をつけます。
注意点
シリアライズ・デシリアライスするプロパティはSetter、Getterの両方が必要。
引数を取らないコンストラクタが必要。(特に引数を取るコンストラクタを定義した場合はデフォルトコンストラクタがないので明示的に引数を取らないコンストラクタを定義する)
簡単なサンプルです。
Public Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'シリアライズ
Dim ss As New SerializeSample
ss.Cd = 1
ss.Child = New Child("taro", 5)
Using fs As New System.IO.FileStream("D:\SerializeSample.xml", IO.FileMode.Create, IO.FileAccess.Write)
Dim xs As New System.Xml.Serialization.XmlSerializer(GetType(SerializeSample))
xs.Serialize(fs, ss)
fs.Close()
End Using
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'デシリアライズ
Dim ss As SerializeSample
Using fs As New System.IO.FileStream("D:\SerializeSamplet.xml", IO.FileMode.Open)
Dim xs As New System.Xml.Serialization.XmlSerializer(GetType(SerializeSample))
ss = CType(xs.Deserialize(fs), SerializeSample)
fs.Close()
End Using
Console.WriteLine(ss.Cd)
Console.WriteLine(ss.Child.ToString)
End Sub
End Class
<Serializable()> _
Public Class SerializeSample
Private _cd As Integer
Private _child As Child
Private _unSerialize As String
Public Property Cd() As Integer
Get
Return Me._cd
End Get
Set(ByVal value As Integer)
Me._cd = value
End Set
End Property
Public Property Child() As Child
Get
Return Me._child
End Get
Set(ByVal value As Child)
Me._child = value
End Set
End Property
<System.Xml.Serialization.XmlIgnore()> _
Public Property UnSerialize() As String
Get
Return Me._unSerialize
End Get
Set(ByVal value As String)
Me._unSerialize = value
End Set
End Property
Public Sub New()
End Sub
End Class
<Serializable()> _
Public Class Child
Private _name As String
Private _age As Integer
Public Property Name() As String
Get
Return Me._name
End Get
Set(ByVal value As String)
Me._name = value
End Set
End Property
Public Property Age() As Integer
Get
Return Me._age
End Get
Set(ByVal value As Integer)
Me._age = value
End Set
End Property
Protected Sub New()
End Sub
Public Sub New(ByVal name As String, ByVal age As Integer)
Me._name = name
Me._age = age
End Sub
Public Overrides Function ToString() As String
Return String.Format("Name:{0} Age:{1}", Me._name, Me._age)
End Function
End Class
出力されたXMLファイルです。
<?xml version="1.0"?>
<SerializeSample xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Cd>1</Cd>
<Child>
<Name>taro</Name>
<Age>5</Age>
</Child>
</SerializeSample>
0 件のコメント:
コメントを投稿