0

让我们从一堆假设开始这个线程:
第一个假设:我们有一个包含以下代码的库 (*.dll):

class Program {
    static void Main(string[] args) {
        XmlSerializer ser = new XmlSerializer(typeof(Foo));
    }
}

public class Foo { public string name;}

第二个假设:我们有一个派生自 Foo 的类,我们称之为 Bar。

public class Bar : Foo { }

此类位于图书馆外。

现在神奇了:Bar 类是通过反射加载的,所以我们在编译时不知道它的存在。XmlSerializer也不知道派生类的任何内容,并且因为我们在一个完全不同的库中,所以我们不能简单地在此处添加,XmlInclude因为我们无法更改Foo-class 的代码。那么有什么方法可以XmlSerializer在 -class 的实例上使用现有的Bar(我知道当前的实现ser对于任何外部代码都完全不可见,但是让我们把它放在一边,假设我们可以从在Bar类内)?

这是否可以通过使用类的属性Bar(类定义前面的[System.Xml.Serialization...])来实现?

4

1 回答 1

0

假设这些限制出于奇怪的原因而存在,并且您的 XmlSerializer 需要一个类型参数,那么您将需要获取该参数的运行时类型。

var barInstance = However().You().Reflect().To().Get().Bar();

// The runtime type
var barType = barInstance.GetType();

var ser = XmlSerializer(barType);

typeof(T) 在编译时获取类型,但由于您无权访问它,因此您需要 Obj.GetType();

于 2013-09-19T14:59:19.473 回答