在不知道后面的类的情况下获取C#中特定对象属性的值

我有一个类型为“ object ”的对象(.NET)。 我不知道运行时它背后的“ 真实类型(类) ”,但我知道,该对象具有属性“ 字符串名称 ”。 我怎样才能追溯“名字”的价值? 这可能吗?

像这样的东西:

object item = AnyFunction(....); string value = item.name; 

使用reflection

 System.Reflection.PropertyInfo pi = item.GetType().GetProperty("name"); String name = (String)(pi.GetValue(item, null)); 

你可以使用dynamic而不是object来做到这一点:

 dynamic item = AnyFuncton(....); string value = item.name; 

反思可以帮到你。

 var someObject; var propertyName = "PropertyWhichValueYouWantToKnow"; var propertyName = someObject.GetType().GetProperty(propertyName).GetValue(someObject, null); 

反思和动态价值访问是这个问题的正确解决方案,但速度很慢。 如果您想要更快的东西,那么您可以使用表达式创建动态方法:

  object value = GetValue(); string propertyName = "MyProperty"; var parameter = Expression.Parameter(typeof(object)); var cast = Expression.Convert(parameter, value.GetType()); var propertyGetter = Expression.Property(cast, propertyName); var castResult = Expression.Convert(propertyGetter, typeof(object));//for boxing var propertyRetriver = Expression.Lambda>(castResult, parameter).Compile(); var retrivedPropertyValue = propertyRetriver(value); 

如果缓存创建的函数,这种方式会更快。 例如,在字典中,键是实际的对象类型,假设属性名称没有更改,或者类型和属性名称的某种组合。

只需对对象的所有属性进行尝试,

 foreach (var prop in myobject.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance)) { var propertyName = prop.Name; var propertyValue = myobject.GetType().GetProperty(propertyName).GetValue(myobject, null); //Debug.Print(prop.Name); //Debug.Print(Functions.convertNullableToString(propertyValue)); Debug.Print(string.Format("Property Name={0} , Value={1}", prop.Name, Functions.convertNullableToString(propertyValue))); } 

注意: Functions.convertNullableToString()是用于将NULL值转换为string.empty的自定义函数。

在某些情况下,Reflection无法正常工作。

如果所有项目类型相同,则可以使用词典。 例如,如果您的商品是字符串:

 Dictionary response = JsonConvert.DeserializeObject>(item); 

或者说:

 Dictionary response = JsonConvert.DeserializeObject>(item);