2015-02-09 68 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屬性。

這需要編譯和加載所有派生類,所以您首先必須在沒有此信息的情況下生成一次基類代碼。