GetProperty("pname")返回null

inc*_*ete 18 c# asp.net

我想获得动态对象的动态属性的值.这是我的代码..

public string ReturnProperty(object ob, string prop)
{            
    Type type = ob.GetType();
    PropertyInfo pr = type.GetProperty(prop);

    //Here pr is null..Dont know whats wrong

    return pr.GetValue(ob, null).ToString();
}
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 31

我的猜测是,它既不是公共财产,也不是你的名字错了,或者根本不是财产(只是公共领域).

如果不知道实际类型是什么,就不可能多说,但这应该是一个开始.

你提到这是一个"动态对象",但这并不是非常具有描述性.请记住,CLR本身对DLR一无所知 - 如果您的意思是这是一种实现IDynamicMetaObjectProvider或扩展的类型DynamicObject,那么您将无法像这样获得具有"正常"反射的属性.

  • 我遇到了类似的问题,实际上我根本没有房产,而是公共场地!使用FieldInfo而不是PropertyInfo为我工作. (9认同)

Got*_*nen 8

在我的情况下ob没有正确的pr getter setter.

//causes GetProperty to return null
public class MyClass{
    public object pr;
}

//Works
public class MyClass{
    public object pr { get; set; }
}
Run Code Online (Sandbox Code Playgroud)


nyc*_*elp 6

如果您尝试访问的项目没有 getter 和 setter 访问器,那么它很可能是一个字段。

所以你的代码将按如下方式工作:

FieldInfo fieldInfo = type.GetField(fieldName); 
Run Code Online (Sandbox Code Playgroud)


小智 5

就我而言,我必须定义 get 和 set。见上面的帖子

public string MyPropertyName { get; set; }
Run Code Online (Sandbox Code Playgroud)

在此之后,我可以通过以下方式获得该物业:

typeof(MyClassItem).GetProperty("PropertyName")
Run Code Online (Sandbox Code Playgroud)