【发布时间】:2019-07-13 05:37:52
【问题描述】:
我有一个要求,我需要获取以下类型
public class Class1
{
}
public class Class2 : Class1
{
}
public class Class3 : Class1
{
}
我可以在目标程序集上调用Assembly.GetTypes() 并添加从Class1 派生的所有类。我正在订购这些类型,以便下次使用该订单。
该顺序对于内部序列化和反序列化至关重要,因为内部引擎取决于类型的索引而不是类型名称。我无法更改序列化引擎。
如果将来有一个新类Class4 派生自Class1,那么它应该按Class3 之后的顺序出现。
我想不出可行的解决方案。
我需要维护一个 xml 文件,其中类型的顺序被保留,如果我遇到新类型,是否应该在 xml 末尾添加?
请帮忙
【问题讨论】:
-
您不能依赖 GetTypes 方法返回的类型的任何顺序。如果您有一些自定义的排序规则,那么您应该将这些规则应用于方法返回的结果。
-
基于任意索引而不是类型名称本身的类型的(反)序列化需要索引和相应类型之间的映射。这就是您对 XML 所做的基本操作,我想这种方法是这种情况下的最佳选择。这样的 XML/文本文件易于维护和验证。 (可能还有其他方法,例如创建自定义类型属性或以某种方式将序列化索引号放在类型名称中,但这些方法很麻烦且容易出错。)
-
程序集中类的顺序是任意的,你不能依赖任何东西 stackoverflow.com/questions/11213732/… 。您将需要一个额外的机制,例如您谈到的 .xml 或下面的答案中概述的。
标签: c# reflection