派生类型的XML序列化问题

时间:2011-06-23 13:21:55

标签: c# inheritance xml-serialization

我目前在使用派生类时遇到了从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的实例,则序列化完全按预期工作。然而,反序列化正在抛出。我的理解是,如果我给XmlSerializer ctor所有可能的类型,它应该选择正确的类型。

这不是这种情况还是我错过了什么?感谢

1 个答案:

答案 0 :(得分:1)

序列化时,您需要为XmlSerializer使用相同的构造函数,就像反序列化一样,即您的代码将更改为:

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