2

私は次のXMLを持っています

<?xml version="1.0" ?>
<SERVICES.OUTPUTResponse>
  <Results>
    <Result>
      <Dataset name="OutputData">
        <Row>
            <country>USA</country>
            <pubyear>9986</pubyear>       
            <numart>123</numart>
            <numcites>456</numcites>
        </Row>
        <Row>
            <country>USA</country>
            <pubyear>97</pubyear>
            <numart>895</numart>
            <numcites>231</numcites>
        </Row>
      </Dataset>
      <Dataset name="Result 2">
        <Row>
          <Result_2>
            true
          </Result_2>
        </Row>      
      </Dataset>
    </Result>
  </Results>
  <_Probe></_Probe>
</SERVICES.OUTPUTResponse>

XmlSerializerを使用して逆シリアル化しようとしましたが、nullが返されます。

私が使用したプロパティクラスは

パブリッククラスXMLDetails{

    public string country { get; set; }

    public string pubyear { get; set; }

    public string numart { get; set; }

    public string numcites { get; set; }
}

デシリアライズコードは

XmlRootAttribute xRoot = new XmlRootAttribute();
                xRoot.ElementName = "SERVICES.OUTPUTResponse";   
                                xRoot.IsNullable = true;
                var serializer = new XmlSerializer(typeof(XMLDetails), xRoot);
                var reader = new StringReader(remoteXml);
var objpublication = (XMLDetails)(serializer.Deserialize(reader));

私がそれを再び愛するのを手伝ってください

4

2 に答える 2

1

Linq To Xml を使用する場合

XDocument xDoc = XDocument.Parse(xml); //or XDocument.Load(filename);

var rows = xDoc.XPathSelectElement("//Dataset[@name='OutputData']")
            .Descendants("Row")
            .Select(r => new XMLDetails
            {
                country = r.Element("country").Value,
                pubyear = r.Element("pubyear").Value,
                numart = r.Element("numart").Value,
                numcites = r.Element("numcites").Value,
            })
            .ToList();

PS: 必要な名前空間System.Xml.LinqSystem.Xml.XPath

于 2012-10-18T19:23:08.240 に答える
0

まず、 (スキーマ)ファイルと(クラス)ファイルxsd.exeの生成に使用する必要があります.xsd.cs

XML スキーマ定義ツール (Xsd.exe)

「Visual Studio コマンド プロンプト」を実行すると、xsd.exe パス定義が既に定義されており、すぐに使用できます。

コンソールに次のコマンドを入力します *xml は「yourxmlfile.xml」に保存されていると仮定します

>xsd.exe yourxmlfile.xml

このコマンドは「yourxmlfile.xsd」ファイルを生成します

次に、ファイルを生成するために次のコマンドを実行し.csますが、変更する前に

<xs:element name="Results" minOccurs="0" maxOccurs="unbounded"><xs:element name="Results" minOccurs="0" maxOccurs="1">生成された xsd ファイルの行 (結果を配列プロパティではなくプロパティに変更するため)

>xsd.exe yourxmlfile.xsd /c

このコマンドは「yourxmlfile.cs」を生成します

これで、このファイルをプロジェクトに追加でき、以下のように xml ファイルを逆シリアル化できます

        var serializer = new XmlSerializer(typeof(SERVICESOUTPUTResponse));
        SERVICESOUTPUTResponse instance = null;
        using (var fileStream = File.OpenRead(@"c:\path_to\yourxmlfile.xml"))
        {
            instance = (SERVICESOUTPUTResponse)serializer.Deserialize(fileStream);
        }
于 2012-10-18T20:47:56.260 に答える