【发布时间】:2009-08-06 16:36:20
【问题描述】:
我如何转换一个对象的实例并真正使它成为那种类型的对象?
我有一个类 myClass1,它是 myClass2 和 myClass3 的基类。我想使用 myClass1 进行审计,我想要的只是来自 myClass1 的数据。因为 myClass2 和 myClass3 从 myClass1 继承,您可以将 myClass1 的实例设置为 myClass2 的实例:
myClass2 foo = new myClass2();
foo.prop1 = "some data";
foo.prop2 = "some More Data";
myClass1 bar = foo;
问题来了是因为我使用的是通用的
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());
在我对其进行序列化时传递类,XmlSerializer 会引发错误,因为即使我已将其转换为 myClass1,基础对象仍然是 myClass2,您可以通过将其转换为对象然后检查类型和 XmlSerializer 来查看这一点很困惑,因为我告诉它让它成为一个 class1 虽然它是自己的反射,但它认为它是一个 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;
name 的值是“myClass2”,这说明内存中的数据实际上是 myClass2,bar 下方只是指向 myClass2 对象的指针。无需创建新实例并将该新实例的值设置为该对象,例如
myClass1 bar = new myClass1(){prop1=foo.prop1, prop2=foo.prop2};
我真的不想那样做。
【问题讨论】:
-
你能证明你正在调用 SerializeGeneric 吗?另外,您可能想更改标题,因为我认为 XMLSterilizer 不是您想要的。
-
是的,XMLSterilizer 会完全不同
标签: c# generics xml-serialization casting