2015-02-09 114 views
0

我正在开发一个代码生成器,它生成类,然后通过XmlSerializer将这些类序列化为XML。如何查找派生类型隐藏其属性的基类属性

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

我在想,它们必须是一种很好的方式来使用反射来找到我生成的基类的所有派生类型,并且如果任何派生类型隐藏成员或具有不同的自定义属性,那么我会在此属性上生成[XmlIgnore]属性,以便序列化程序不会窒息。

必须有一个相对简单的方法来做到这一点,因为编译器在编译时知道哪些基类属性是隐藏的,并且如果不指定'new'关键字来告诉编译器这是什么意。

任何想法,我可以去这个优雅的方式?

+0

您需要分两步进行操作,因为只有代码可用于基类时,才能编译派生类。尽管如此,这仍然看起来不是最理想的解决方案。如果从同一个基地派生出多个类别,只有一些类别隐藏了某个属性会怎么样? – 2015-02-09 17:51:11

+0

在我的情况下,不会发生,即使它现在也可以,现在就处理它。 – 2015-02-09 17:53:36

+0

现在我试图分两步来做。我正在编译dll,然后加载该程序集并使用反射来查找在衍生类型中定义的dervied类型和成员,但这很丑陋。 – 2015-02-09 17:55:25

回答

1

从派生类中的PropertyInfo中,您需要遵循GetMethod和/或SetMethod属性到MethodInfo的实际实现。

然后,检查获取器和设置器上的NewSlot属性。

这需要编译和加载所有派生类,所以您首先必须在没有此信息的情况下生成一次基类代码。