我已经给出了我无法更改的
XML,我需要将其反序列化为自定义类:
<Person> <Addresses> <MainAddress> <Country /> <City /> </MainAddress> <AdditionalAddress> <Country /> <City /> </AdditionalAddress> <AdditionalAddress> <Country /> <City /> </AdditionalAddress> ... other additional addresses </Addresses> ... other elements </Person>
然后我反序列化:
XmlSerializer serializer = new XmlSerializer(typeof(Person),namespace); Person person = serializer.Deserialize(stream) as Person;
如果简单元素被反序列化,则反序列化器可以正常工作.
当有像Addresses这样的元素时,我在它的类上实现了IXmlSerializable,就像这里:link text
问题是reader.ReadElementContentAsstring()不能与复杂元素一起使用.
解决方法
Adressess类应该以这种方式声明:
[XmlRoot("Adressess")] public class Adressess { [XmlElement(ElementName = "MainAddress")] public MainAddress Main { get; set; } [XmlElement(ElementName = "AdditionalAddress")] public List<AdditionalAddress> AdditionalAddresses { get; set; } } [XmlRoot("MainAddress")] public class MainAddress { public string Country { get; set; } public string City { get; set; } } [XmlRoot("AdditionalAddress")] public class AdditionalAddress { public string Country { get; set; } public string City { get; set; } }