連載 .NETで簡単XML 第11回 オブジェクトをXMLでシリアライズ(3)株式会社ピーデー 川俣 晶2003/11/22 |
|
|
ArrayListオブジェクトのシリアライズ
ここまで見てきたように、シリアライズ関連の機能には、配列を対象とした場合に特別な機能を発揮するものがある。配列を含むクラスをシリアライズする場合には力になってくれることだろう。しかし、実際にプログラムを作成する場合、データの集まりを表現するために配列を使うとは限らない。.NET Frameworkのクラス・ライブラリには、ArrayListクラスなど個性豊かな「コレクション」と呼ばれるクラス群があり、それらを配列の代わりに使うこともあるためだ。もちろん、新規にそのようなクラスを自作する場合もあるだろう。そのようなクラスを使った場合、シリアライズはどうなるのだろうか。
次に示すのは、配列の代わりにArrayListクラス(System.Collections名前空間)を使用した例である。前回のサンプル・プログラム5-2と共通の部分は再掲しない。相違のあるPersonクラスだけ掲載する。
|
|
サンプル・プログラム3:配列の代わりにArrayListクラスを使う例(VB.NET版/C#版) |
これを実行した結果は次のとおり。
山田太郎 |
生成されるXML文書は以下のようになる。
|
|
生成されるXML文書 |
このように、ArrayListクラスを使った場合でも、配列と同じようにシリアライズすることができる。しかし、完全に同じというわけではない。ArrayListクラスのフィールドを宣言している部分にXmlArrayItem属性が付いていることに注意していただきたい。Personクラスの配列に、Personクラスのインスタンスへの参照を代入している場合、XmlArrayItem属性は不要だった。なぜ、ArrayListクラスではこれが必要なのだろうか。
その理由は少し考えると分かるだろう。Personクラスの配列は、それがPerson型を入れるための宣言されたことが明示されている。しかし、ArrayListクラスはクラス・ライブラリの中にあるもので、自作クラスであるPersonクラスのことなど何も知らない。ArrayListクラスは、あくまでObject型を格納するために作成されたものであり、Personクラスのインスタンスへの参照が格納できるのは、Personクラスが暗黙のうちにObject型を継承している派生クラスであるためである。派生クラスのインスタンスの参照を入れるのであれば、XmlArrayItem属性が必要とされるわけである。
あくまで派生クラスのインスタンスを扱っているのだということに注意を払えば、ArrayListクラスをシリアライズすることは難しくない。
INDEX | ||
.NETで簡単XML | ||
第11回 オブジェクトをXMLでシリアライズ(3) | ||
1.派生クラスを含む配列のシリアライズ | ||
2.派生クラスを含む配列をシリアライズするプログラムの内容 | ||
3.要素のシーケンスとしての配列のシリアライズ | ||
4.ArrayListオブジェクトのシリアライズ | ||
5.自作コレクションのシリアライズ | ||
「連載 :.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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|