Microsoft はシリアル化されたデータの重要性を認識しており、.NET フレームワークに名前空間 System.Runtime.Serialization と System.Xml.Serialization を組み込み、シリアル化機能を提供し、ユーザーが独自のシリアル化メソッドを作成できるようにしました。 。 System.Xml.Serialization 名前空間は、オブジェクトを XML 形式にシリアル化するための基本的なメソッドを提供します。このメソッドの使用方法を見てみましょう。
XMLの魅力
シリアル化された XML とは、保存または送信の便宜のために、オブジェクトのパブリック フィールドと属性をシリアル形式 (ここでは XML 形式) で保存するプロセスを指します。逆シリアル化は、シリアル状態情報を使用して、オブジェクトをシリアル XML 状態から元の状態に復元するプロセスです。したがって、シリアル化は、オブジェクトの状態をストリームまたはバッファーに保存する方法と考えることができます。
シリアル化の目的は、データの保存とデータ変換です。データ ストレージとは、ユーザー セッション間でデータを保存することを指します。アプリケーションが閉じられると、データは保存 (シリアル化) され、ユーザーが戻ってくると、データは再ロード (逆シリアル化) されます。データ変換とは、データを別のシステムが理解できる形式に変換することを指します。シリアル化とXMLを利用することで、データ変換を簡単に行うことができます。
オブジェクト内のデータは、クラス、メソッド、プロパティ、プライベート型、配列、または System.Xml.XmlElement オブジェクトまたは System.Xml.XmlAttribute オブジェクトに埋め込まれた XML にすることもできます。
System.Xml.Serialization 名前空間のキー クラスは XmlSerializer です。もちろん、この名前空間には XML や SOAP の他の側面に関連する他のクラスも含まれていますが、ここでは XmlSerializer クラスに焦点を当てます。
Xmlシリアライザー
XmlSerializer クラスは、オブジェクトを XML ファイルにシリアル化し、XML ドキュメントをオブジェクトに逆シリアル化するメソッドを提供します。また、ユーザーはオブジェクトを XML に変換する方法を指定することもできます。シリアル化するオブジェクトの型をパラメータとしてクラス コンストラクターに渡すことができます。次の C# コードは、コンストラクターの使用法を示しています。
XmlSerializer ser = new XmlSerializer(typeof(objectToSerialize));
以下は同等の VB.NET コードです。
Dim ser As New XmlSerializer(GetType(objectToSerialize))
実際のシリアル化プロセスは、XmlSerializer クラスの Serialize メソッドに実装されます。このメソッドを使用すると、シリアル化中に TextWriter、Stream、および XmlWriter オブジェクトを呼び出すことができます。次のコード例は、このメソッドを呼び出す方法を示しています。この例では、オブジェクトがシリアル化され、ローカル ディスク上のファイルに保存されます。この例はクラス宣言で始まり、その後にシリアル化されたソース コードが続きます。
システムを使用する;
名前空間 BuilderSerialization {
パブリック クラス アドレス {
パブリック アドレス() {}
パブリック文字列アドレス1;
パブリック文字列アドレス2;
パブリック文字列 市区町村;
パブリック文字列の状態。
パブリック文字列Zip;
パブリック文字列国。
} }
システムを使用する;
名前空間 BuilderSerialization {
パブリック クラス 著者 {
public Author() { }
パブリック文字列名;
パブリック文字列 MiddleName;
パブリック文字列LastName;
パブリック文字列 タイトル;
パブリック文字列 性別。
パブリックアドレス AddressObject;
} }
名前空間 BuilderSerialization {
パブリック クラス Book {
public Book() { }
パブリック文字列 タイトル;
パブリック著者AuthorObject;
公開文字列 ISBN;
public double RetailPrice;
パブリック文字列発行元。
}}
システムを使用する;
System.Xml.Serialization を使用します。
System.IO を使用します。
名前空間 BuilderSerialization {
クラス TestClass {
static void Main(string[] args) {
Book BookObject = new Book();
XmlSerializer ser = new XmlSerializer(typeof(Book));
TextWriter ライター = new StreamWriter("booktest.xml");
BookObject.Title = "実践的な LotusScript";
BookObject.ISBN = "1884777767 ";
BookObject.Publisher = "マニング出版物";
BookObject.RetailPrice = 43.95;
BookObject.AuthorObject = 新しい著者();
BookObject.AuthorObject.FirstName = "トニー";
BookObject.AuthorObject.LastName = "パットン";
BookObject.AuthorObject.Gender = "男性";
BookObject.AuthorObject.AddressObject = 新しいアドレス();
BookObject.AuthorObject.AddressObject.Address1 = "メインストリート 1";
BookObject.AuthorObject.AddressObject.City = "どこでも";
BookObject.AuthorObject.AddressObject.State = "KY";
BookObject.AuthorObject.AddressObject.Zip = "40000";
BookObject.AuthorObject.AddressObject. Country = "米国";
ser.Serialize(writer, BookObject);
Writer.Close();
上記
のコードは 3 つのオブジェクトを 1 つのオブジェクトに変換し、シリアル化プロセス中に XML ファイルを生成します。以下は、サンプル プログラムによって生成された XML ドキュメントです:
<?xml version="1.0" encoding="utf-8"?>
<書籍 xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance ">
<タイトル>実践的な LotusScript</Title>
<著者オブジェクト>
<名>トニー</名>
<姓>パットン</姓>
<性別>男性</性別>
<アドレスオブジェクト>
<住所 1>メインストリート 1 番地</住所 1>
<都市>どこでも</都市>
<州>ケンタッキー</州>
<郵便番号>40000</郵便番号>
<国>米国</国>
</アドレスオブジェクト>
</AuthorObject>
<ISBN>1884777767 </ISBN>
<小売価格>43.95</小売価格>
<出版社>Manning Publications</出版社>
</Book>
シリアル化プロセスでは、オブジェクト データのネストも処理できることに注意してください。データは認識可能な形式に変換されるため、データの再ロード (逆シリアル化) や別のシステムへのデータ転送が容易になります。データ転送プロセス中に、受信システムは XML ファイルの形式を知る必要があります (事前に知らない場合)。したがって、XML スキーマ ファイルを提供する必要があります。 .NET Framework の XSD.exe ツールは、シリアル化された XML のスキーマ ファイルを生成できます。
以下は、VB.NET で記述されたコードの例です。
パブリック クラス アドレス
文字列としてのパブリック アドレス 1
文字列としてのパブリック アドレス 2
文字列としての公開都市
文字列としてのパブリック状態
文字列としての公開郵便番号
文字列としての国を公開
終了クラス
パブリッククラスの作成者
文字列としての公開名
文字列としてのパブリックミドルネーム
文字列としての公開姓
文字列としての公開タイトル
文字列としての公開性別
アドレスとしてのパブリック アドレス オブジェクト
終了クラス
公開クラスブック
作成者としてパブリック AuthorObject
文字列としての公開タイトル
文字列としてのパブリック ISBN
一般小売価格は2倍
文字列としての公開パブリッシャー
終了クラス
System.Xml.Serialization をインポートします
インポートSystem.IO
モジュール モジュール1
サブメイン()
新しい本としての薄暗い BookObject
Dim ser As New XmlSerializer(GetType(Book))
Dim ライター As New StreamWriter("booktest.xml")
BookObject を使用する
.Title = "実践的な LotusScript"
.ISBN = "1884777767 "
.Publisher = "マニング出版物"
.小売価格 = 43.95
.AuthorObject = 新しい著者
.AuthorObject.FirstName = "トニー"
.AuthorObject.LastName = "パットン"
.AuthorObject.Gender = "男性"
.AuthorObject.AddressObject = 新しいアドレス
.AuthorObject.AddressObject.Address1 = "メインストリート 1"
.AuthorObject.AddressObject.City = "どこでも"
.AuthorObject.AddressObject.State = "KY"
.AuthorObject.AddressObject.Zip = "40000"
.AuthorObject.AddressObject. Country = "米国"
で終わる
ser.Serialize(ライター、BookObject)
Writer.Close()
エンドサブ
エンドモジュール
制御出力
シリアル化プロセスでは標準 XML ファイルが生成され、データ メンバーは XML 要素に変換されます。ただし、すべてのデータ メンバーが要素になるわけではありません。クラス コードにいくつかのタグを追加することで、出力 XML ファイルを制御できます。このようにして、データ メンバーを要素ではなく XML 属性に変換したり、単純に無視したりできます。次の例は、ブック クラスの VB.NET コードを変更したものです。
公開クラスブック
作成者としてパブリック AuthorObject
文字列としての公開タイトル
<System.Xml.Serialization.XmlAttribute()> _
文字列としてのパブリック ISBN
<System.Xml.Serialization.XmlIgnoreAttribute()> _
一般小売価格は2倍
文字列としての公開パブリッシャー
End Class
このコードは、XML ファイルの生成時にクラス メンバー ISBN を XML 属性として使用し、RetailPrice メンバーを無視するようにシステムに指示します。この変更は、生成された XML ファイル
<?xml version="1.0"coding="utf-8"?>
で確認できます。
<書籍 xmlns:xsd=" http://www.w3.org/2001/XMLSchema "
xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance " ISBN="1884777767 ">
<著者オブジェクト>
<名>トニー</名>
<姓>パットン</姓>
<性別>男性</性別>
<アドレスオブジェクト>
<住所 1>メインストリート 1 番地</住所 1>
<都市>どこでも</都市>
<州>ケンタッキー</州>
<郵便番号>40000</郵便番号>
<国>米国</国>
</アドレスオブジェクト>
</AuthorObject>
<タイトル>実践的な LotusScript</Title>
<出版社>Manning Publications</出版社>
</Book>
対応する C# コードは次のとおりです。
public class Book {
public Book() { }
パブリック文字列 タイトル;
パブリック著者AuthorObject;
[System.Xml.Serialization.XmlAttribute()]
公開文字列 ISBN;
[System.Xml.Serialization.XmlIgnoreAttribute()]
public double RetailPrice;
パブリック文字列発行元。
上記
では、2 つのマーキング記号について簡単に説明しただけです。完全なマークアップ表記については、.NET ドキュメントを参照してください。
逆シリアル化されたデータの逆シリアル化は、XmlSerializer クラスの Deserialize メソッドを呼び出すことで簡単に実現できます。次の VB.NET プログラム フラグメントは、上記の XML ドキュメントの逆シリアル化を完了します:
Dim BookObject As New Book
Dim ser As New XmlSerializer(GetType(Book))
Dim fs As New System.IO.FileStream("booktest.xml", FileMode.Open)
新しい System.XML.XmlTextReader(fs) としての Dim リーダー
BookObject = CType(ser.Deserialize(reader), Book)
このプログラムは、後で使用できるように結果データをメモリに保存します。同等の C# コードを次に示します。
XmlSerializer ser = new XmlSerializer(typeof(Book));
System.IO.FileStreamfs = new System.IO.FileStream("booktest.xml",
ファイルモード.オープン);
System.Xml.XmlTextReader リーダー = 新しい System.Xml.XmlTextReader(fs);
Book BookObject = (Book)(ser.Deserialize(reader));
-------------------------------------------------- -
著者について: Tony Patton は、豊富な知識を持つプロのアプリケーション開発者であり、Java、VB、Lotus、および XML の認定資格を持っています。