連載 .NETで簡単XML 第9回 オブジェクトをXMLでシリアライズ(1)株式会社ピーデー 川俣 晶2003/10/15 |
|
Back Issue
|
||||||||||||||||
|
今回のサンプル・プログラムについて
今回もサンプル・プログラムは、Visual Basic .NET(以下VB.NET)とC#で記述したものを用意した。VB.NETのサンプルを掲載するとともに、VB.NET、C#それぞれへのサンプルのリンクを張ってあるので、必要に応じてダウンロードしてほしい。開発環境としてはVisual Studio.NET 2003を使用することを前提にしている。
サンプル・プログラムはすべてWindowsアプリケーションとしてプロジェクトを作成後に、フォームのLoadイベントに実行するコードを書き込み、Trace.WriteLineメソッドで結果を出力する。結果の確認は、統合開発環境(IDE)の出力ウィンドウで行う。ただし、クラスだけはフォームのクラス外に別途記述する必要がある。それぞれのソースの先頭には、以下のコードが書かれているものとする。
|
|
VB.NETの場合 |
|
|
C#の場合 |
オブジェクトの永続化
純粋なオブジェクト指向の世界とは、あらゆる情報がオブジェクトとしてモデリングされ、クラスとして記述される。プログラムとは、クラスの集まりであり、クラスから生成される多数のインスタンスが情報の実体を持つことになる。しかし、この方法には重大な問題がある。それは、通常インスタンスはメモリ上に生成されるものであり、プログラムを終了すると消えてしまうということである。どんなに素晴らしい情報を持ったインスタンスを生成したとしても、プログラムが終了すると消えてなくなるのはうれしいことではない。そこで必要とされるのが、「永続化」という機能である。永続化とは、インスタンスの内容をファイルなどに保存することによって、プログラムが終了してもインスタンスの内容を生き延びさせる機能である。そしてそれが再び必要とされたとき、インスタンスの内容を読み取って復活させることができる。
このような永続化によく使われる機能として「シリアライズ」と呼ばれるものがある(「シリアル化」とも呼ばれる)。これは、インスタンスの内容を一列のデータの列に置き換える処理である。複雑な構造のデータであっても、直線的な一列のデータに置き換えることができれば、ファイルに保存したり、通信回線で送ったりが容易になる。また、この一列のデータを復元することを「デシリアライズ」という(「逆シリアル化」とも呼ばれる)。シリアライズとデシリアライズの機能は、多くのオブジェクト指向関係のシステムで用意されている標準的な機能といえる。その点で、.NET Frameworkも例外ではない。
次の問題は、どのようなフォーマットにシリアライズするかである。直線的な一列のデータに置き換えるといっても、それを具体的に表現する方法は1つではない。まったく独自のバイナリ・データとして書き込む方法もあるし、何らかの標準化されたテキスト・データとして書き込む方法もある。速度や容量の点からいえば、独自のバイナリ形式でシリアライズしてしまうのが最善だが、このような方法を使うと、特定のシステムでしか読み書きできないデータが出力されてしまう。ただ単に、あるプロセスが終了してから次に起動されるまでの間だけ内容を保持するならこれでもよいが、シリアライズした内容を別のシステムに送信して、そこで処理を継続するような使い方も想定すると、これでは不十分である。つまり、相互に互換性のないシステム間で、シリアライズしたデータをやり取りする可能性があるということである。そのような使い方を考えると、標準化されたテキスト・データを使う価値が見えてくるだろう。また、システムのメンテナンス性などを考えれば、分かりやすいテキスト・データとしてシリアライズすることは価値があるといえる。
そのような観点から世の中を見ると、XMLという格好の材料があることが分かるだろう。XMLの登場以来、シリアライズのフォーマットとしてXMLを使うということがよく行われるようになった。.NET Frameworkもその例外ではなく、XMLによるシリアライズを行うXmlSerializerクラス(System.Xml.Serialization名前空間)を含んでいる。今回はこのクラスを使って、オブジェクトをシリアライズして永続化するプログラミングを解説したいと考えている。
なお、.NET Frameworkに含まれるシリアライズの機能は、XmlSerializerクラスだけではない。もう1つ、Serializable属性を用いる方法がある。この機能の内容と、今回解説する機能との相違も、この連載の中で触れる予定である。
最もシンプルなシリアライズ
さっそく、XmlSerializerクラスを使用して、シリアライズを行う例を見てみよう。このサンプル・プログラムでは、「Person」というクラスを作成し、それをシリアライズしてファイルに書き込み、それを読み込んで内容を出力するコードを作成している。Personクラスと、シリアライズを行うコードは直接関係を持たないので、別個に掲載しよう。まず、Personクラスは以下のように記述した。
|
|
サンプル・プログラム1-1:Personクラス(VB.NET版/C#版) |
このクラスは特殊な機能などは使用していないので、特に解説を行う必要はないだろう。
INDEX | ||
.NETで簡単XML | ||
第9回 オブジェクトをXMLでシリアライズ(1) | ||
1.シリアライズによるオブジェクトの永続化 | ||
2.シリアライズ/デシリアライズを行う例 | ||
3..XmlIgnoreAttribute属性を使用したシリアル化の防止 | ||
「連載 :.NETで簡単XML」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|