我有 2 节课:
public class ClassA
public class ClassB (from another namespace) : ClassA
我有 xml 文件填充ClassA
.
如何ClassB
在反序列化时将其转换为。
是否可以 ??
我有 2 节课:
public class ClassA
public class ClassB (from another namespace) : ClassA
我有 xml 文件填充ClassA
.
如何ClassB
在反序列化时将其转换为。
是否可以 ??
您不能将基类转换为派生类 - 您只能将派生类转换回它们的基类(单向)。
我尝试了这个解决方案,即应用一个 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);
}
}
创建 XmlSerialiser 时,您需要从您的ClassB
.,然后它将反序列化为您希望的类。
将基类转换为派生类的实例是无效的。