如何查找基于派生类型隐藏其属性的基类属性

时间:2015-02-09 17:44:47

标签: c# .net xml serialization reflection

我正在开发一个构建类的代码生成器,然后通过XmlSerializer将这些类序列化为XML。

问题是我的一些基类已定义属性,但派生类型中的某些属性将使用派生类型中的“new”关键字隐藏。这会导致类型序列化的问题,因为序列化程序不允许序列化类型,除非基类型具有在属性上指定的[XmlIgnore]属性,该属性将被派生类型隐藏。问题是我在生成代码之后才知道这一点。

我认为他们必须是一个很好的方法来使用反射来查找我正在生成的基类的所有派生类型,如果任何派生类型隐藏成员或具有不同的自定义属性,那么我会在此属性上生成[XmlIgnore]属性,以便序列化程序不会阻塞。

必须有一个相对简单的方法来执行此操作,因为编译器在编译时知道哪些基类属性被隐藏,并且如果您没有指定'new'关键字来告诉编译器这是什么意图,则会提供警告。

我能以优雅的方式提出任何想法吗?

1 个答案:

答案 0 :(得分:1)

从派生类中的PropertyInfo开始,您需要将GetMethod和/或SetMethod属性跟踪到实际实现的MethodInfo

然后,检查getter和setter上的NewSlot属性。

这需要编译和加载所有派生类,因此您首先必须生成基类代码一次,而不需要此信息。