1

我有 2 节课:

public class ClassA

public class ClassB (from another namespace) : ClassA

我有 xml 文件填充ClassA.

如何ClassB在反序列化时将其转换为。

是否可以 ??

4

3 回答 3

1

您不能将基类转换为派生类 - 您只能将派生类转换回它们的基类(单向)。

于 2010-03-01T08:57:20.833 回答
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);

    }
}
于 2010-03-01T09:03:13.530 回答
0

创建 XmlSerialiser 时,您需要从您的ClassB.,然后它将反序列化为您希望的类。

将基类转换为派生类的实例是无效的。

于 2010-03-01T08:59:27.013 回答