我目前在使用派生类时遇到了从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所有可能的类型,它应该选择正确的类型。
这不是这种情况还是我错过了什么?感谢
答案 0 :(得分:1)
序列化时,您需要为XmlSerializer使用相同的构造函数,就像反序列化一样,即您的代码将更改为:
public void WriteXML(XmlWriter writer)
{
var lizer = new XmlSerializer(typeof(Foo), new Type[] { typeof(Bar) });
lizer.Serialize(writer,SomeObject);
}