2012-02-14 42 views
3

是否有可能獲得所有在其中明確定義了Serializable屬性的擴展類類型?使用反射來獲取所有帶有Seri​​alizable屬性的擴展類型

[DataContract] 
[KnownType("GetKnownTypes"); 
public abstract class BaseClass 
{ 
    public Type[] GetKnownTypes(){ 
     return all classes which extend this class 
     AND explicitly have the [Serializable] attribute 
    } 
} 

public class DoNotWant : BaseClass {} 

[Serializable] 
public class Want : BaseClass {} 

所以GetKnownTypes將返回類「希望」,因爲它擴展BaseClass的,並明確了Serializable接口,同時DoNotWant屬性不包含屬性序列化的明確

謝謝

編輯:: 我不相信IsSerializable是準確依賴的,因爲它似乎總是如此(我不確定這是因爲BaseClass是否可序列化)

+0

該場景令人困惑,因爲WCF/DataContract不關心** [Serializable],所以我們不希望看到它。此外,編譯器細節[Serializable]映射到支持IsSerializable的相同CLI標誌(它實際上並未實現爲屬性...否:我的意思是) - 但是,它可能因繼承而異。但是,如果所有類型都在同一個程序集中,那麼它應該很容易。 – 2012-02-14 17:30:10

回答

4

未經測試,但類似:

var types = typeof(BaseClass).Assembly.GetTypes().Where(t => 
    t.IsClass && t.BaseType == typeof(BaseClass) 
    && Attribute.IsDefined(t, typeof(SerializableAttribute))).ToArray(); 
+0

奇數。我的代碼幾乎與此相同,但沒有奏效。我會盡力發現兩者之間的差異。謝謝。 – AlanFoster 2012-02-14 17:42:34

相關問題