Проблема XMLSerialization с производными типами - PullRequest
0 голосов
/ 23 июня 2011

У меня сейчас проблема с десериализацией из 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 все возможные типы, то он должен выбрать правильный.

Это не тот случай, или я просто что-то упустил? Спасибо

1 Ответ

1 голос
/ 23 июня 2011

Вам нужно использовать тот же конструктор для XmlSerializer при сериализации, что и при десериализации, т.е. ваш код изменится на это:

public void WriteXML(XmlWriter writer)
{
    var lizer = new XmlSerializer(typeof(Foo), new Type[] { typeof(Bar) });
    lizer.Serialize(writer,SomeObject);
}
...