У меня сейчас проблема с десериализацией из XML при использовании производных классов. Сериализация работает просто отлично, но обратное действие приводит к неожиданному исключению элемента.
Пример кода:
public class Foo
{
//Some Properties
}
public class Bar : Foo
{
//more properties
}
public class Holder : IXmlSerializable
{
public Foo SomeObject;
public void WriteXML(XmlWriter writer)
{
var lizer = new XmlSerializer(SomeObject.GetType());
lizer.Serialize(writer,SomeObject);
}
public void ReadXML(XmlReader reader)
{
reader.MoveToContent();
reader.ReadStartElement();
var lizer = new XmlSerializer(typeof(Foo), new Type[] { typeof(Bar) });
SomeObject = (Foo)lizer.Deserialize(reader);
}
Если для Holder.SomeObject задан экземпляр Bar, сериализация работает точно так, как ожидается. Однако десериализация бросает. Насколько я понимаю, если я предоставлю ctor XmlSerializer все возможные типы, то он должен выбрать правильный.
Это не тот случай, или я просто что-то упустил? Спасибо