2010-12-08 8 views
2

XMLのファイルがあります.Net XmlSerializerクラスを使用して逆シリアル化しようとしています。私はxml形式を表すC#クラスを思いついていません。私の主な問題は、一般的な配列を表すために使用される要素を扱うことです。配列のサブ要素は必ずしも同じではありません。また、配列の配列に問題があります。これは、読み込んだ配列がネイティブにサポートされていません。XML配列のデシリアライズ

例:

<root> 
    <parent_1> 
     <sub_element0 value="0"/> 
     <sub_element1> 
      <array idx="0" value="0"/> 
      <array idx="1" value="0"/> 
     </sub_element1> 
    </parent_1> 
    <parent_2> 
     <array idx="0"> 
      <array idx="0"> 
       <sub_element2 value="0"/> 
      </array> 
      <array idx="1"> 
       <sub_element2 value="0"/> 
      </array> 
     </array> 
     <array idx="1"> 
      <array idx="0"> 
       <sub_element2 value="0"/> 
      </array> 
      <array idx="1"> 
       <sub_element2 value="0"/> 
      </array> 
     </array> 
    </parent_2> 
</root> 

もし配列要素がないサブ要素を使用し、(それ自体を含む)のサブ要素とされて見ることができるように。私は 'array'という名前のクラスを作成することはできません。どうすればこれを処理できますか?

何か助けていただければ幸いです。

答えて

2

XSDを作成するには、問題のXMLでxsd.exeを実行します。次に、生成されたXSDでxsd.exe/cを実行して、シリアライゼーション/デシリアライゼーションクラスを作成します。 arrayという名前のクラスは作成されず、array1というクラスが作成され、XmlElementAttributeにXML名「array」が適用されます。

+0

私はXMLファイルでXsd.exeではを実行すると、私は次のエラーを取得する: - 2つの入れ子になったリレーションシップ – Tony

+0

えっ内の子テーブルであるDataTableの「配列」に制約を追加することはできません - 私はそれを取得できませんでした.NET 4(VS 2010)バージョンのxsd.exe。あなたはどちらを使っていますか? –

+0

私は.NET 2(VS 2005)を使用しています – Tony

1

xsd.exeは、ノードの上位ノードと同じ名前のXMLインスタンスをサポートしていません。この場合、同じ名前の子を持つ「配列」(プロパティ 'idx'で区別されます)があります。これは既知の問題であり、何年も知られているので、私はあなたの呼吸を分類することはしません。

私は今日同じことをしてきましたが、私は解決策を見つけ出しています。このページを再度見つけたら、私は更新します。

更新:私の解決策は、独自のデシリアラークラスを作成することでした。私が受け取っていたXMLは、要素&c内に繰り返し要素を持つことはあまりありませんでした。私は、要素を引き出すXMLを通して再帰したいくつかのクラスをノックアップしました - 非常に素早く簡単で素敵です。

  1. ダウンロードtrang.jar(それはXMLの推定器からJavaのXSDである)(場所のためのgoogle)
  2. あなたのXMLにそれを実行します。それはあなたのために良いではない場合

    しかし、これは試しますXSD /クラス '

あなたはそうでしょう、この「あなたの中Xsd.exeではへとXSDファイル

  • スラップを与えます。java -jar trang.jar
  • ' のようなファイルそれはうまく見えませんが、それは動作します。

  • 関連する問題