在.NET中,您可以使用reflection来获取类的所有非inheritance方法吗?

由于这里的问题,我正在尝试编写一个自定义JsonConverter来处理您对列表或集合进行子类化的情况,然后为其添加额外的属性。 因此,一种方法是忽略所有基类属性,并仅序列化已定义类中的属性。 (从技术上讲,这是行不通的,因为如果你inheritance了那个子类,你就会破坏序列化,但它确实让我想知道……)

是否有可能通过reflection(我知道答案是’是’,因为Reflector确实如此,但我不知道如何)只获得在类本身定义的成员而不是inheritance的成员? 例如…

public class MyBaseClass { public string BaseProp1 { get; set; } public string BaseProp2 { get; set; } } public class MySubClass : MyBaseClass { public string SubProp1 { get; set; } public string SubProp2 { get; set; } } 

在这种情况下,我想反思MySubClass并且只忽略BaseProp1BaseProp2而得到SubProp1SubProp2 。 那怎么可能呢?

中号

在调用“GetMembers”方法来获取Type的成员时,可以在绑定标志中具体指定“DeclaredOnly”。

您必须选择MySubClass所有成员,并仅保留DeclaringType == MySubClass

使用LINQ,类似的东西(矫枉过正):

 MemberInfo[] notInherited = GetType("MySubClass").GetMembers().Where(m => m.DeclaringType == GetType("MySubClass")); 

或者使用GetMembers()重载:

 MemberInfo[] notInherited = GetType("MySubClass").GetMembers(BindingFlags.DeclaredOnly); 

许多reflection函数接受BindingFlags类型的参数。 此枚举包含值DeclaredOnly:

指定仅应考虑在提供的类型的层次结构级别声明的成员。 不考虑inheritance的成员。

MemberInfo.DeclaringType应该做你需要的。 要在X类型中直接定义成员,请通过DeclaringType == typeof(X)过滤成员。