我正在开发一个构建类的代码生成器,然后通过XmlSerializer
将这些类序列化为XML。
问题是我的一些基类已定义属性,但派生类型中的某些属性将使用派生类型中的“new”关键字隐藏。这会导致类型序列化的问题,因为序列化程序不允许序列化类型,除非基类型具有在属性上指定的[XmlIgnore]
属性,该属性将被派生类型隐藏。问题是我在生成代码之后才知道这一点。
我认为他们必须是一个很好的方法来使用反射来查找我正在生成的基类的所有派生类型,如果任何派生类型隐藏成员或具有不同的自定义属性,那么我会在此属性上生成[XmlIgnore]
属性,以便序列化程序不会阻塞。
必须有一个相对简单的方法来执行此操作,因为编译器在编译时知道哪些基类属性被隐藏,并且如果您没有指定'new'关键字来告诉编译器这是什么意图,则会提供警告。
我能以优雅的方式提出任何想法吗?
答案 0 :(得分:1)
从派生类中的PropertyInfo
开始,您需要将GetMethod
和/或SetMethod
属性跟踪到实际实现的MethodInfo
。
然后,检查getter和setter上的NewSlot
属性。
这需要编译和加载所有派生类,因此您首先必须生成基类代码一次,而不需要此信息。