オブジェクトのインスタンスをキャストし、実際にそのオブジェクトの型にするにはどうすればよいですか?ジェネリックスとXmlSerializerの継承キャストの問題
私は、myClass2とmyClass3の基本クラスであるmyClass1クラスを持っています。 myClass1を監査用に使用したいのですが、myClass1のデータが必要です。 myClass2とmyClass3はmyClass1から継承するため、あなたはmyClass2例のインスタンスにmyClass1のインスタンスを設定することができます。
私はときに、クラスを渡すために、一般的なpublic static IXPathNavigable SerializeGeneric<T>(T serializableObject)
{
String XmlizedString = "Error processing request";
XmlDocument XMLObject = new XmlDocument();
try
{
MemoryStream memoryStream = new MemoryStream();
XmlSerializer xs = new XmlSerializer(serializableObject.GetType());
を使用していますので、問題が来る
myClass2 foo = new myClass2();
foo.prop1 = "some data";
foo.prop2 = "some More Data";
myClass1 bar = foo;
私はシリアライズし、XmlSerializerはエラーをスローします。なぜなら、私はそれをmyClass1としてキャストしています。基底のオブジェクトはまだmyClass2です。オブジェクトをキャストして型をチェックし、XmlSerializer getは混乱しています。それをクラス1にしてくださいそれはそれがmyClass2と見る自分自身の反射ですが
myClass2 foo = new myClass2();
foo.prop1 = "some data";
foo.prop2 = "some More Data";
myClass1 bar = foo;
object obj = bar;
string name = obj.GetType().Name;
名前の値は、メモリ内のデータが実際にはmyClass2であることを示す「myClass2」です。バーの下には、myClass2オブジェクトへのポインタがあります。新しいインスタンスを作成せずに、その新しいインスタンスの値をそのオブジェクトに設定することなく、
myClass1 bar = new myClass1(){prop1=foo.prop1, prop2=foo.prop2};
私は本当にそうしたくありません。
SerializeGenericを呼び出していることを示すことはできますか?また、XMLSterilizerはあなたが望むものではないと思うので、タイトルを変更したいかもしれません。 – SwDevMan81
はいXMLSterilizerはまったく別のものになります –