Используйте отражение, чтобы получить все расширенные типы с Serializableattriubte
Можно ли получить все расширяющиеся типы классов, в которых явно указан атрибут 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 явно
Спасибо
Edit:: Я не верю, что IsSerializable является точным, на который можно положиться, так как кажется, что это всегда так (я не уверен, так ли это, потому что BaseClass является Serializable или нет)
1 ответ
Решение
Не проверено, но что-то вроде:
var types = typeof(BaseClass).Assembly.GetTypes().Where(t =>
t.IsClass && t.BaseType == typeof(BaseClass)
&& Attribute.IsDefined(t, typeof(SerializableAttribute))).ToArray();