方法は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 件のコメント:
コメントを投稿