基本クラス:
使用してシステムを。 使用してSystem.Collections.Genericを。 使用してSystem.Linqのを。 使用してSystem.Textのを。 名前空間DeserializeTest { パブリック クラスSettingsBase { プライベート 文字列m_fileName。 公共 文字列ファイル名は { 取得 { リターンm_fileNameを。} 集合 {m_fileName = 値。} } } }
派生クラス:
使用してシステムを。 使用してSystem.Collections.Genericを。 使用してSystem.Linqのを。 使用してSystem.Textのを。 名前空間DeserializeTest { パブリック クラスWorldWindSettings:SettingsBase { パブリックWorldWindSettings() :ベース() { } プライベート ストリング m_proxyUrl = "" ; 公共の 文字列ProxyUrlは { 取得 { リターンm_proxyUrlを。 } 集合 { この .m_proxyUrl = 値; } } } }
主な機能は、テストコードを呼び出します。
使用したシステムを、 使用System.Collections.Genericを、 使用してSystem.Linqのを、 使用System.Textのを、 使用System.IOを、 使用System.Xml.Serializationと、 名前空間DeserializeTest { クラスプログラム { 静的 ボイドメイン(文字列[]引数) { // テスト1:テスト・ベース・クラスのインスタンスにデシリアライズxmlファイル。テスト。限りに同じ名前の非直列化されたクラスを使用して、ルートノードXMLファイルの名前として 文字列 fileNameBase = @「D:\ MyProjectと\ DeserializeTest \ DeserializeTest \ binに\デバッグ\ GobalConfig \ SettingsBase.xml 」; SettingsBase SettingsBase。 XmlSerializerをSerBase = 新しい新規のXmlSerializer(typeof演算(SettingsBase)); 使用(たTextReader trBase = 新しい新規のStreamReader(fileNameBase)) { SettingsBase = (SettingsBase)serBase.Deserialize(trBase); settingsBase.FileName = fileNameBase; } // テスト2:テストxmlファイルは、サブクラスをデシリアライズします。テスト。限り、同じ名前の非直列化されたクラスを使用してXMLファイルのルート名としてすることができます。もちろん、デシリアライゼーション派生クラス後のクラスのインスタンスに対するベース点の例を参照して問題ではありません。 文字列 fileNameに= @ " D:\ MyProjectと\ DeserializeTest \ DeserializeTest \ binに\デバッグ\ GobalConfig \ WorldWind.xml " 。 SettingsBase設定; //現在はWorldWindSettings設定として、ここで定義されていない、何の問題の 種類のタイプ= typeof演算(WorldWindSettings); // ルート名xmlファイルのみWorldWindSettingsのために、ここで、WorldWindSettingsあるので、しかし、ことはできませんSettingsBase のSerのXmlSerializer = 新しい新しいXmlSerializerを(タイプ)、 使用(TR =たTextReader 新しい新規のStreamReader(filename)で) { // 設定=(WorldWindSettings)ser.Deserialize(TR); // 2によって、このコード! =設定(SettingsBase)ser.Deserialize(TR); settings.FileName = ファイル名; } System.Console.WriteLine(" こんにちは" ); } } }
基本クラスのXMLファイル:
<?XMLバージョン= " 1.0 "コード= " UTF-8 "?> <SettingsBase> <ファイル名> WorldWind.xml </ファイル名> </ SettingsBase>
派生クラスのXMLファイル:
<?XMLバージョン= " 1.0 "コード= " UTF-8 "?> <WorldWindSettings> <ファイル名> WorldWind.xml </ファイル名> <ProxyUrl> www.baidu.com </ ProxyUrl> </ WorldWindSettings>
ダウンロードソース:DeserializeTest.rarの 抽出コード:pkya
要約:限り、同じ名前のデシリアライズクラスでルートノードのXMLファイルの名前とすることができるように、クラスのインスタンスとして非直列化XMLファイル。もちろん、デシリアライゼーションの派生クラス後のインスタンスを指すように、基本クラスのインスタンスを参照して、直列化復元の成功、後に問題はありません。
その他の考慮事項:
1は、クラスの静的メンバ変数がある場合は、クラスがインスタンス化されたコンストラクタを呼び出す前に、最初の静的メンバ変数をインスタンス化します。