0

私のアプリケーションには、Android クライアントと c# でコーディングされた Windows プリント サーバーの 2 つの部分があります。

Java で Xstream を使用して、オブジェクトを XML (アンドロイド) に変換しました。ここにその一部があります:

<ROOT>
  <id>1</id>
  <serial>92000</serial>
  <date>2013/2/15</date>

  <ITEMS>

    <ITEM>
      <name>/**SOMETHING**/</name>
      <idd>/**SOMETHING**/</idd>
      <pd>/**SOMETHING**/</pd>
      <ed>/**SOMETHING**/</ed>
    </ITEM>
    <ITEM>
      <name>/**SOMETHING**/</name>
      <idd>/**SOMETHING**/</idd>
      <pd>/**SOMETHING**/</pd>
      <ed>/**SOMETHING**/</ed>
    </ITEM>
    <ITEM>
      <name>/**SOMETHING**/</name>
      <idd>/**SOMETHING**/</idd>
      <pd>/**SOMETHING**/</pd>
      <ed>/**SOMETHING**/</ed>
    </ITEM>

  </ITEMS>

</ROOT>

ご覧のとおり、2 つのオブジェクト タイプ、1 つの ROOT オブジェクト タイプ、および ITEMS という名前の 2 番目のオブジェクト タイプのネストされたリストがあります。ROOT オブジェクトの名前、シリアル、および日付を読み取ることができますが、ITEMS オブジェクトのネストされたリストの場合、常に null が返されます。

C# の Root クラスのクラスは次のとおりです。

[XmlRoot("ROOT")]
    public class ROOT_CLASS
    {

        [XmlElement("id")]
        public string idVar{ get; set; }

        [XmlElement("serial")]
        public string serialVar{ get; set; }

        [XmlElement("date")]
        public string dateVar{ get; set; }

        [XmlArray("ITEMS")]
        [XmlArrayItem("ITEM")]
    public List<NESTED_CLASS> oi { get; set; }

    }

ネストされたオブジェクトクラスは次のとおりです。

[XmlRoot("ITEM")]
    public class NESTED_CLASS
    {
        [XmlElement("name")]
        public string nameVV; { get; set; }
        [XmlElement("idd")]
        public string iddVV; { get; set; }
        [XmlElement("pd")]
        public string pdVV; { get; set; }
        [XmlElement("ed")]
        public string edVV; { get; set; }

    } 

さて、このxmlからNESTED_CLASSリストを逆シリアル化するにはどうすればよいですか? 私が言ったように、私はいつもそれからヌルを得ます。私を助けてください。ありがとう...

4

2 に答える 2

0

これを手動で行う代わりに、xsd.exe を使用して C# クラスを生成することもできます。これは、この xml が時間の経過とともに変化する場合に備えて、より簡単で高速になる可能性があります。今抱えている問題を心配する必要はありません。

その方法の例については、「XML から C# クラスを生成する」を参照してください。

非常に大きな xml ファイルを操作している場合、xml 全体をメモリにロードするため、この方法は最適ではない可能性があることに注意してください。その場合は、代わりにこのアプローチを使用することをお勧めします。

于 2013-03-18T14:01:53.503 に答える
0

XmlArray 属性を使用する

[XmlRoot(ElementName = "ROOT")]
public class Root
{
    public int id { get; set; }
    public int serial { get; set; }
    public string date { get; set; }

    [XmlArray(ElementName = "ITEMS")]
    [XmlArrayItem("ITEM")]
    public List<RootItem> Items { get; set; }
}

public class RootItem
{
    public string name { get; set; }
    public string idd { get; set; }
    public string pd { get; set; }
    public string ed { get; set; }
}
于 2013-03-18T13:36:08.723 に答える