C# 派生类型的XMLSerialization问题
我目前在使用派生类时遇到了从XML反序列化的问题。序列化工作得很好,但反之则会导致意外的元素异常 示例代码:C# 派生类型的XMLSerialization问题,c#,inheritance,xml-serialization,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
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提供了所有可能的类型,那么它应该选择正确的类型
是不是这样,还是我遗漏了什么?谢谢您在序列化时需要使用与反序列化时相同的XmlSerializer构造函数,即您的代码将更改为:
public void WriteXML(XmlWriter writer)
{
var lizer = new XmlSerializer(typeof(Foo), new Type[] { typeof(Bar) });
lizer.Serialize(writer,SomeObject);
}
我喜欢'lizer'作为变量名。看到从反序列化中得到的异常将非常有用。谢谢,这适用于基本情况。但是,如果Bar实现IXmlSerializable,我在Holder.WriteXML过程中会遇到一个异常,说“类型Bar不能用于此上下文”,我认为这是正确的。。当您执行新的XmlSerializer(typeof(Foo))时,根xml元素将是(或预期是),而如果执行新的XmlSerializer(obj.GetType()),其中obj是一个条,则根xml元素将是。