Используйте отражение, чтобы получить все расширенные типы с Serializableattriubte - PullRequest
3 голосов
/ 14 февраля 2012

Можно ли получить все расширяющиеся типы классов, в которых явно указан атрибут 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 и явно имеет атрибутСериализуемый, в то время как DoNotWant не содержит атрибут Сериализуемый явноне уверен, что это потому, что BaseClass является Сериализуемым или нет)

1 Ответ

4 голосов
/ 14 февраля 2012

Не проверено, но что-то вроде:

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