我有2个课程:
public class ClassA
public class ClassB (from another namespace) : ClassA
我的xml文件填充了ClassA
。
如何在反序列化时将其强制转换为ClassB
。
有可能??
答案 0 :(得分:1)
您不能将基类强制转换为派生类 - 您只能将派生类强制转换回其基类(单向)。
答案 1 :(得分:1)
我尝试了这个解决方案,即应用一个XmlRoot元素,指定与ClassA中相同的元素名称 这应该有效:
using System;
using System.IO;
using System.Xml.Serialization;
[XmlRoot("ClassA")]
public class ClassA {
[XmlElement]
public String TextA {
get;
set;
}
}
[XmlRoot("ClassA")] // note that the two are the same
public class ClassB : ClassA {
[XmlElement]
public String TextB {
get;
set;
}
}
class Program {
static void Main(string[] args) {
// create a ClassA object and serialize it
ClassA a = new ClassA();
a.TextA = "some text";
// serialize
XmlSerializer xsa = new XmlSerializer(typeof(ClassA));
StringWriter sw = new StringWriter();
xsa.Serialize(sw, a);
// deserialize to a ClassB object
XmlSerializer xsb = new XmlSerializer(typeof(ClassB));
StringReader sr = new StringReader(sw.GetStringBuilder().ToString());
ClassB b = (ClassB)xsb.Deserialize(sr);
}
}
答案 2 :(得分:0)
创建XmlSerialiser时,您需要从ClassB
执行此操作,然后将其反序列化为您希望的类。
将基类强制转换为派生类的实例是无效的。