使用反射获取具有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)
未测试,但类似于:
var types = typeof(BaseClass).Assembly.GetTypes().Where(t =>
t.IsClass && t.BaseType == typeof(BaseClass)
&& Attribute.IsDefined(t, typeof(SerializableAttribute))).ToArray();