I have two xml files which have the same data but different names for the tags. One has named reference tags while the other has a short version.
As the data is exactly the same i want to be able to deserialise these files into objects, but I don’t want to have to deal with two seperate objects.
To deserialise the files i have created the following class:
[XmlRoot(ElementName="Message")]
public class ONIXMessage
{
[XmlAttribute(AttributeName="release")]
public string Release { get; set; }
[XmlElement("Header")]
public Header Header { get; set; }
[XmlElement("Product")]
public List<Product> Products { get; set; }
}
For the files with the short tags i have this:
[XmlRoot(ElementName="message")]
public class ONIXMessage
{
[XmlAttribute(AttributeName="release")]
public string Release { get; set; }
[XmlElement("x1")]
public Header Header { get; set; }
[XmlElement("x2")]
public List<Product> Products { get; set; }
}
I had a go using interfaces but wasn’t really sure how to get the Header and Product to return correctly. They are different for each version too.
Is there a better way to deserialise the xml? Or can this still be done with what i already have?
Any help would be much appreciated.
Edit:
Only took five years but I figured it out! This can be achieved by using XmlAttributeOverrides.
http://www.ikriv.com/dev/dotnet/OverrideXml.shtml
Interfaces are probably the best way to go.. What I would do is mix up the interface with a factory, and do something similar to:
Whereby you create two specialised readers and use a factory to control the creation of the message using whichever reader is required. The trickier part is identifying which reader would be the one to use.
Hope that gets you started…