0

("address") という名前のノードが重複している次の xml があり、これらの "address" ノードを 1 つのオブジェクトに逆シリアル化する必要があります。

<dealer id="8569" ed="0">
  <name hide="0">some name</name>
  <url>http://www.some.com</url>
  <address hide="0" />
  <address>
    <line1>text1</line1>
    <line2>text2</line2>
    <line3>text3</line3>
    <town>Town</town>
    <postcode>Postcode</postcode>
  </address>
</dealer>

次のクラスに逆シリアル化する必要があります。

public class Dealer
{
    public Dealer()
    {
        _address = new Address();
    }

    [XmlAttribute("id")]
    public long Id { get; set; }

    [XmlElement("name")]
    public string Name{ get; set; }

    [XmlElement("url")]
    public string Url{ get; set; }

    [XmlElement("address")]
    public Address Address{ get; set; }

}    
public class Address
{
    [XmlElement("line1")]
    public string Line1{ get; set; }

    [XmlElement("line2")]
    public string Line2 { get; set; }

    [XmlElement("line3")]
    public string Line3 { get; set; }

    [XmlElement("county")]
    public string County{ get; set; }

    [XmlElement("town")]
    public string Town{ get; set; }

    [XmlElement("postcode")]
    public string Postcode{ get; set; }
}

この xml が上記のクラスに逆シリアル化されると、常に最初の「アドレス」ノードが取得されますが、2 番目のノードを取得する必要があります。これどうやってするの?

4

1 に答える 1

1

XML スキーマを変更する以外に考えられるのは、DealerクラスIXmlSerializableに関連するReadXmlメソッドを実装して実装し、目的の xml ノードを使用することだけです。http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixlserializable.readxml.aspx

それ以外に、両方の表現と互換性のあるオブジェクトDealer.Addressのコレクション/配列になるように変更し、逆シリアル化後にコレクションから空のアドレスを無視/削除することができます。Address

于 2012-09-26T15:09:48.697 に答える