次の XML コード構造をシリアライズ/デシリアライズしようとしています。
<Person>
<Name/>
<Age/>
<Address>
<BuildingNumber/>
<Street/>
<Town/>
<PostCode/>
</Address>
</Person>
クラスの使用
public class Person {
public string Name { get; set; }
public int Age { get; set; }
public Address Address { get; set; }
}
public class Address {
public string BuildingNumber { get; set; }
public string Street { get; set; }
public string Town { get; set; }
public string PostCode { get; set; }
}
私はIXmlSerializable
両方のクラスで実装しています(この特定の例では過剰に設計されていますが、私が取り組んでいるかなり複雑なプロジェクトには必要です!)、シリアル化は正常に機能しますが、逆シリアル化は機能しません。
問題は、Person.ReadXml()
私が次のように書いたメソッドで発生します。
public void ReadXml(XmlReader reader) {
reader.ReadStartElement();
if (!reader.IsEmptyElement) {
Name = reader.ReadElementContentAsString("Name", string.Empty);
Age = reader.ReadElementContentAsInt("Age", string.Empty);
Address = (Address)reader.ReadElementContentAs(typeof(Address), null, "Address", string.Empty);
// Also failed: Address = (Address)reader.ReadElementContentAsObject("Address", string.Empty);
}
reader.ReadEndElement();
}
初期化されている最後の行Address
は、例外をスローしています:
子要素を持つ要素で ReadElementContentAs() メソッドを呼び出すことはできません。(XmlException)
基本的に、を使用して子要素を持つ要素をどのように処理しIXmlSerializable
ますか?