0

くだらないタイトルでごめんなさい。自由に変更してください。

問題は次のとおりです。次のようなXMLファイルのセットを読み取る必要があります。

<rootElement>
   <header>
      <!-- some stuff here -->
   </header>
   <businessContent>
      <oneOfSeveralAllowedSubNodesHereLikeCustomer />
   <businessContent>
</rootElement>

取得xsd.exeしたスキーマファイルからC#クラスを生成する必要があり、そのように実行されました(簡略化)。

public class rootElement
{
   public header header {get;set;}
   public object businessContent {get;set;}
}
// other classes like header and classes for the values
// allowed within business content, say customer

のタイプは十分に公平であることに注意してbusinessContentくださいSystem.Object。スキーマは、実際にそこに何を入れることができるかについて明確に何も述べていません。customerしかし、私はその中にあるxmlファイルを持っていますbusinessContent。顧客はxsdで定義され、そのxsd.exeためのクラスも生成されます。このクラスのインスタンスが作成され、自分のものとして配置されることを期待しますがbusinessContent、XMLを読み取ると次のようになります。

var serializer = new XmlSerializer(typeof(rootElement));
var root = (rootElement)serializer.Deserialize(stream));
var customer = (customer)root.businessContent;

root.businessContentのタイプがであり、ではXmlNode[]ないため、例外が発生しcustomerます。

では、オブジェクトを完全に逆シリアル化するようにシリアライザーを作成するにはどうすればよいcustomerですXmlNode[]か?

4

1 に答える 1

1

不明なクラスのシリアル化と復元

var extraTypes = new[] { typeof(customer), typeof(otherAllowedSubnodeTypes) };
var serializer = new XmlSerializer(typeof(rootElement), extraTypes);
于 2012-05-22T00:43:41.860 に答える