将xml转换为继承的类

时间:2010-03-01 08:50:21

标签: c# xml-serialization xml-deserialization

我有2个课程:

public class ClassA

public class ClassB (from another namespace) : ClassA

我的xml文件填充了ClassA

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

有可能??

3 个答案:

答案 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执行此操作,然后将其反序列化为您希望的类。

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