使用反射来获取Serializableattribute的所有扩展类型

时间:2012-02-14 17:23:42

标签: c# reflection datacontractserializer

是否有可能获得明确定义了Serializable属性的所有扩展类类型?

[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将返回类'Want',因为它扩展了BaseClass并且显式具有Seri​​alizable属性,而DoNotWant不包含Serializable属性

谢谢

编辑:: 我不相信IsSerializable是准确的依赖,因为它似乎永远是真的(我不确定这是因为BaseClass是否可以序列化)

1 个答案:

答案 0 :(得分:4)

未经测试,但类似:

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