获取Object的类型,该Object是另一个对象的属性

时间:2009-03-19 19:37:14

标签: .net reflection

为了说明解释让我们说我有一个具有Address类型的Address属性的Company对象。所以它会是这样的:

public class Company  
{  
    Address CompanyAddress;
}  

public class Address  
{
    int Number;
    string StreetName;  
}

现在我有一个适用于任何类型的对象类型的方法,我想从收到的对象中获取一个特定的属性,所以我正在尝试以下方法:

public string MyMethod(object myObject, string propertyName)
{
    Type objectType = myObject.GetType();
    object internalObject = objectType.GetProperty("Address");

    Type internalType = internalObject.GetType();
    PropertyInfo singleProperty = internalType.GetProperty("StreetName");

    return singleProperty.GetValue(internalObject, null).ToString();
}

问题是internalType永远不是Address而是“System.Reflection.RuntimePropertyInfo”所以singleProperty总是为null;

我该如何做到这一点?

谢谢。

2 个答案:

答案 0 :(得分:2)

您的代码存在的问题是internalObject将是PropertyInfo方法返回的GetProperty对象。您需要获取该属性的实际值,因此调用GetValue方法。

public string MyMethod(object myObject, string propertyName) {
    Type objectType = myObject.GetType();
    object internalObject = objectType.GetProperty("Address").GetValue(myObject, null);

    Type internalType = internalObject.GetType();
    PropertyInfo singleProperty = internalType.GetProperty("StreetName");

    return singleProperty.GetValue(internalObject, null).ToString(); 
}

答案 1 :(得分:0)

internalObject只是一个PropertyInfo对象,就像singleProperty一样。

您应该使用相同的技术来提取实际对象:

    PropertyInfo addressProperty = objectType.GetProperty("Address");

    object interalObject = addressProperty.GetValue(myObject);

其余的都是正确的。