Я пытаюсь десериализовать XML с двумя пространствами имен, как это
<records xmlns="http://www.foo.com/xml/records/1.1">
<record xmlns="http://www.foo.com/xml/record/1.1">
и иногда более старая версия
<records xmlns="http://www.foo.com/xml/records/1.1">
<record xmlns="http://www.foo.com/xml/record/1.0">
Мой класс Records.cs имеет
[XmlRoot(ElementName = "records", Namespace = "http://www.foo.com/xml/records/1.1")]
public class Records
{
[System.Xml.Serialization.XmlElementAttribute("record")]
public List<Record> Records { get; set; }
}
Я хочу, чтобы список записей мог содержать запись версии 1.0 или версии
/// <remarks/>
[XmlRoot(IsNullable = false, ElementName = "record", Namespace = "http://www.foo.com/xml/record/1.0")]
public partial class Record
{
/// <remarks/>
public Record()
{
}
}
/// <remarks/>
[XmlRoot(IsNullable = false, ElementName = "record", Namespace = "http://www.foo.com/xml/record/1.1")]
public partial class Record11 : Record
{
/// <remarks/>
public Record11()
{
}
}
поэтому я предположил, что подклассы записи будут работать.
Я получаю исключение Reflection при десериализации, и оно указывает мне на атрибут XmlChoiceIdentifier. Однако это похоже на перечисления.
Кто-нибудь знает, как делать то, что я хочу (поддерживает десериализацию нескольких версий одной и той же схемы?)
Спасибо.