Используйте отражение, чтобы получить все расширенные типы с 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();
Другие вопросы по тегам