我正在尝试序列化/反序列化以下 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() 方法。(Xml 异常)
基本上,我将如何处理带有子元素的元素IXmlSerializable
?