Reputation: 10358
I have given XML that I can't change and I need to deserialize it to a custom class:
<Person>
<Addresses>
<MainAddress>
<Country />
<City />
</MainAddress>
<AdditionalAddress>
<Country />
<City />
</AdditionalAddress>
<AdditionalAddress>
<Country />
<City />
</AdditionalAddress>
... other additional addresses
</Addresses>
... other elements
</Person>
Then I deserialize:
XmlSerializer serializer = new XmlSerializer(typeof(Person), namespace);
Person person = serializer.Deserialize(stream) as Person;
Deserializer works fine in case simple elements are deserialized. When there is element like Addresses I implement IXmlSerializable on its class like here: link text
The problem is that reader.ReadElementContentAsString() cannot be used with complex elements.
Upvotes: 6
Views: 3970
Reputation: 529
Also if the root object type has a namespace, you must use the same namespace for the nested types.
Example:
[System.Xml.Serialization.XmlRootAttribute(Namespace = "some namespace")]
class Person {...}
[System.Xml.Serialization.XmlRootAttribute(Namespace = "some namespace")]
class MainAddress{...}
Upvotes: 0
Reputation: 6685
Adressess class should be declared this way:
[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; }
}
Upvotes: 4