使用反射获取具有Serializableattriubte的所有扩展类型

本文关键字:扩展 类型 Serializableattriubte 反射 获取 | 更新日期: 2023-09-27 18:24:40

是否可以获取所有明确定义了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并显式地具有Serializable属性,而DoNotWant不显式地包含Serializable 属性

谢谢

编辑::我不相信IsSerializable是准确的,因为它似乎总是正确的(我不确定这是否是因为BaseClass是Serializable)

使用反射获取具有Serializableattriubte的所有扩展类型

未测试,但类似于:

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