如何动态获取从Person类(Student,Teacher)继承的所有非泛型类以及Person类的属性(Address)。
示例代码:
[DataContract]
[KnownType(typeof(Student))]
[KnownType(typeof(Teacher))]
public abstract class Person {
[DataMember]
public string Name { get; set; }
[DataMember]
public string Surname { get; set; }
[DataMember]
public Address _Address { get; set; }
}
答案 0 :(得分:1)
var nonGenericProperties = typeof(Person)
.GetProperties()
.Where(p => !p.IsGenericType)
.ToList();
var nonGenericClassesWhichInheritFromPerson = Assembly.GetAssembly(typeof(Person))
.GetTypes()
.Where(t => t.IsSubclassOf(typeof(Person))
.ToList()
第二个查询仅检查同一程序集中的派生类型。
答案 1 :(得分:0)
要查找继承Person的所有类,您需要定义您要查找的位置。你无处可寻。假设所有类都与Person类在同一个程序集中,您可以编写:
Assembly.GetAssembly(typeof(Person)).GetTypes().Where(t => typeof(Person).IsAssignableFrom(t) && !t.ContainsGenericParameters);
对于属性,在所有属性的foreach循环中执行相同的操作:
foreach (var pi in typeof(Person).GetProperties())
{
// Do the same for pi.PropertyType
}