私は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
逆シリアル化中にキャストする方法。
出来ますか ??
基本クラスを派生クラスにキャストすることはできません。派生クラスを基本クラスにキャストして戻すことはできます(一方向)。
私はこの解決策を試しました。つまり、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);
}
}
XmlSerialiserを作成するときは、から作成する必要がありますClassB
。そうすると、希望するクラスとして逆シリアル化されます。
基本クラスを派生クラスのインスタンスとしてキャストすることは無効です。