2012-02-14 45 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

相关问题