Приведение xml к унаследованному классу - PullRequest
1 голос
/ 01 марта 2010

у меня 2 класса:

public class ClassA

public class ClassB (from another namespace) : ClassA

У меня есть xml-файлы, заполненные ClassA.

Как привести его к ClassB при десериализации.

это возможно ??

Ответы [ 3 ]

1 голос
/ 01 марта 2010

Я попробовал это решение, т.е. применил элемент 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);

    }
}
1 голос
/ 01 марта 2010

Нельзя привести базовый класс к производному классу - вы можете преобразовать только производные классы обратно в их базовые классы (односторонние).

0 голосов
/ 01 марта 2010

При создании XmlSerialiser вам нужно сделать это из вашего ClassB, затем он будет десериализован как нужный вам класс.

Было бы неверно приводить базовый класс как экземпляр производного класса.

...