O bject BLVD オブジェクト 散歩道 の 例題でわかる! .NET Framework 第 7 回 「XMLでシリアル化」 吉田 弘一郎 YOSHIDA, Koichiro ことにします。要するに、XML文書に Technology Tools XML 情報を書き出したり、逆に読み込んだ りするのですが、ここではXMLの細か ✓ Visual Basic .NET 先月に続いてXMLの話です。先月は、 Visual C# .NET SQL Server 2000 Oracle 9i 正面からXMLに取り組んだので少々疲 一種の馬鹿チョンモードで知らないう れましたね。今月は、XMLそのものに ちにXMLすることにしましょう。 Access 2002 は直接手を触れず、上手に応用するこ ASP.NET とに徹しましょう。実際、XMLを自分 Internet Information Services で直接扱う機会は極めて少ないものと ✓ Other: い部分にはまったく触れることなく、 シリアル化とは何か 思われます。ちょっとしたXML文書を XML 書き出す程度ならまだしも、XML文書 シリアル化(Serialization)とは、文 の読み込みルーチンを自らプログラム 字通りシリアルにすること、つまり、 する羽目に追い込まれることは、ほと 構造をもっているかもしれないデータ んどないはずだし、逆にあってはなら を、さらにはオブジェクトを、バイト Samples ないのです。 “気が付いたらXMLを使 のストリームにしてしまうことです。 ・この記事で取り上げたソースコードおよび サンプルプログラムは、付録CD-ROMの ¥DOTNET¥SAMPOディレクトリに収 録しています。 っていた”という状況のほうがはるか ここでは、XMLという条件を付けます に多いのです。 ので、バイトのストリームとは、実は Level ★ ★ ★ ★ ★ ¥SAMPO07¥SAMPO07.SLN 今回紹介したサンプルのソリューションファ イル 116 dotNET Magazine 2003 June 今月のテーマは「XMLを用いたシリ XML文書となる文字列の流れになりま アル化」です。すると、みなさんは即 す。要するに、データとかオブジェク 座にASPの話かなと思われるかもしれ トをXML文書に変換してしまえば、フ ません。ましてや、SOAPも使うという ァイルなどに格納したり、ネットワー ことになればなおさらです。実際、ASP クで遠方に転送したりということが可 を使えば、あちこちにXMLが出てきま 能になるという話です。 す。しかし、ここでは、ASPなどよりは それでは、何をシリアル化するので はるかに初歩的なレベルで、XMLを用 しょう。 「データとかオブジェクト」で いたシリアル化の例題をこなしてゆく は、漠然としすぎていますので、ここ 「XMLでシリアル化」 では「オブジェクトのシリアル化」に にするのです。 serializer.Serialize(writer, Tom) 話を限定してしまいます。しかし、ま だ一般的過ぎます。オブジェクトは単 この1 行でできたXML 文書をInter 例題1:単一の オブジェクト(VB01.vb) net Explorerで見ると図1のとおり。た ジェクト」ですから、オブジェクトの 例題1のソースコードVB01.vbをご覧 ようなXML文書を手作業で組み立てて メソッドまでもシリアル化してしまう ください(リスト1) 。Visual Basic 6.0 いましたが、ここでは一発でできてし のでしょうか? もちろん、これは可 では、クラス定義はクラスファイル、 まいます。たしかに便利です。 能です。そもそも、PCで実行可能なプ プログラムモジュールはプログラムフ XMLシリアライザーは次のようにし ログラムは、たとえばABC.EXEのよう ァイルという具合にファイルが単位に て作ります。生成子のパラメータは な実行形式のファイルに収まっていま なっていましたね。しかし、Visual すが、これは「バイナリストリームに Studio .NETでは、ひとつのソースファ シリアル化されたプログラム」であり、 イルの中にクラス定義とプログラムモ これがローダーによってメモリ上に逆 ジュールを混在させることができます。 シリアル化され、プログラム本体が再 この例題1でも、クラス定義とプログラ 出力用ファイルは、次のようにスト 現するのです。しかし、ここでは、そ ムの部分を行き来しながら、どんな例 リームライターを作っておけばよいで こまでは望みません。それどころか、 題にしようかなと考えることから始め しょう。 次のようなレベルにまでシリアル化を たのですが、ひとつのファイルで済む 限定してしまいます。 というのは便利です。 なるデータではないからです。 「データ構造+アルゴリズム=オブ しかに動作しています。先月は、この 「シリアル化したいクラス」です。 Dim serializer As XmlSerializer = _ New XmlSerializer(GetType(Staff)) Dim writer As StreamWriter = _ New StreamWriter("../Vb01.xml") さて、この例題の核心は、XMLシリ オブジェクトの外部から読み書き アライザー“XmlSerializer”です。こ こうしてできたXMLシリアライザー 可能なパブリックなデータメンバ れを用いると、オブジェクトが一発で のSerialize関数を用いて、オブジェク のみの自動化されたXMLシリアル化 XML文書に変換されてしまうのです。 トを出力ファイルにXML文書として書 XmlSerializer型オブジェクトをseriali き出せばよいのです。 たとえば、次のようなStaffクラスが zerとすれば、Staff型オブジェクトの あるとします。ここには、3つのパブリ Tom は次の 1 行で出力先のファイル ックなデータがあり、これ以外にはパ writerにXML文書として書き出されて ブリックでないデータやさまざまなメ しまうのです。 serializer.Serialize(writer, Tom) また、XMLシリアル化の対象となる ソッドがあるとします。 図1:例題1で書き出したXML文書(Vb01.xml) Public Class Staff Public SID As Integer Public Name As String Public EAddress As String … End Class 今月取り扱うXMLシリアル化の場合 には、このStaffクラスのオブジェクト の3つのパブリックなデータのみを対象 dotNET Magazine 2003 June 117
© Copyright 2024 ExpyDoc