2011-11-14 4 views
2

現在、私はシリアル化されたコンテンツは、次のようになります異なるオブジェクト(.NET 2.0)XmlSerializerは、デシリアライズ時にXMLからタイプを自動的に検出します(.NET 2.0)?

をシリアル化するために、XmlSerializerを使用しています:

<?xml version="1.0"?> 
<InitActivityAction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <EmploymentID>1</EmploymentID> 
    <DateFrom>2011-11-14T21:08:17.5893302Z</DateFrom> 
</InitActivityAction> 

のXmlSerializerコンストラクタを指定すると入力が必要です。しかし、私は多くのオブジェクトタイプを使用しています。

XmlSerializerがXMLから必要な型を「自動検出」する方法はありますか?

答えて

4

出荷時には表示されません。

あなたにはオプションがあります。

(1)XPathを使用してXMLを調べると、ルート要素名を取得してオブジェクトの種類を判別できます(または各クラスに固有の名前空間を使用できます)。

(2)CodeProjectのthis oneのような、より複雑なXMLシリアライザを使用することもできます。これは、「辞書」から型を自動的に決定します。次に、リフレクションを使用して実際の型を判断することができます。

(3)各XmlSerializerでXMLを逆シリアル化し、失敗した場合は次のタイプに移動することもできます。とても素敵ではありません。

(4)最後に、オブジェクトごとにメンバを持つクラスを作成し、それぞれのオブジェクトの代わりに個別にシリアル化することができます。例えば、enumメンバを使用して、正しいメンバを抽出するコードを書くことができます。もう一度、良い解決策ではありません。

これらのアプローチのすべてがパフォーマンスコストを追加することに注意してください。そして、彼らはちょうど良いオプションではありません:)

関連する問題