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

私はこの解決策を試しました。つまり、ClassAのものと同じ要素名を指定するXmlRoot要素を適用しました。
これは機能するはずです:

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 に答える