2011-02-28 14 views
0

c#を使用して、さまざまなソースからxmlを共通タイプのオブジェクトにデシリアライズしたいと考えています。 XMLには同じスキーマはありません。たとえば、次のxmlでは/thingContainer/thing/namewidget/@titleの両方がmyClass.DisplayNameにマップされます。異なるスキーマを持つXMLを共有タイプにデシリアライズ

XML1:

<thingContainer> 
    <thing> 
     <name>MyName</name> 
    </thing> 
</thingContainer> 

XML2:それは私のxmlのソースによって異なりますので、

<widget title="myTitle" /> 

だから、私は、[XmlElement]で私のクラスをマークアップすることはできません。継承やいくつかのヘルパークラスを使って私ができることはいくつかありますが、これは異なるソースからxmlを簡単にdeserializeすることができますか?クラスフィールドをxpathにマップする簡単な方法はありますか?

もちろん、私がする必要があれば、私は解析し、xmlを手作業でデシリアライズしますが、それはどうですか?すぐに心に春

答えて

1

つの思考:

  • 使用XSLTは、あなたのオブジェクトモデルと一致する中間形式にオリジナルのXMLを変換するために(非常に人気のあるアプローチを、個人的に私はXSLを軽蔑するが)
  • 作成デシリアライズする暫定オブジェクトモデルを作成し、最終的なオブジェクトモデルにマップします。

おそらくXmlElementのハックリがありますが、面倒なアプローチのようです。

0

私はあなたがここに2つのオプションがあると思う:

  1. があなたのクラスのIXmlSerializableを実装し、ただ、XMLを解析し、そのインスタンスを作成するXMLにLINQを使用するアカウントにあなたのXML
  2. の構造を取ってデシリアライズあなたのクラス。これは、私が選ぶアプローチです(最初の選択を自分で行い、好きではない)
関連する問題