我使用AutoMapper地方有:C#:给定src => src.property,如果你有一个字符串“属性名”选择属性代码?
.ForMember(dest => dest.id, opt => opt.MapFrom(src => src.id))
使用最右边表达src => src.id
,如果我有属性的名称的字符串变量,我会怎么选择由它的性质?
我尝试这样做:
src => propertyName
然后不得不笑当数值是 “ID”。
我使用AutoMapper地方有:C#:给定src => src.property,如果你有一个字符串“属性名”选择属性代码?
.ForMember(dest => dest.id, opt => opt.MapFrom(src => src.id))
使用最右边表达src => src.id
,如果我有属性的名称的字符串变量,我会怎么选择由它的性质?
我尝试这样做:
src => propertyName
然后不得不笑当数值是 “ID”。
您可以使用反射来按名称获取属性:
private R GetProperty<T, R>(T obj, string propertyName)
{
PropertyInfo pi = obj.GetType().GetProperty(propertyName);
return (R)pi.GetValue(obj, null);
}
,你会在AutoMapper使用这样的:
.ForMember(dest => dest.id, opt => opt.MapFrom(src => GetProperty(src, propertyName)))
如果您有希望访问的属性的名称,则可以使用反射来获取MemberInfo,然后从MemberInfo调用该属性。
src => src.GetType().GetProperty(propertyName).GetGetMethod().Invoke(src, new object[] {})
当然,这假定珍闻SRC 具有属性和propertyName的识别对象上的属性。
甜,期待着答案。 – 2010-10-28 02:44:34
+1但是这个代码可以改进,因为它目前不适用于静态属性/字段。 – 2010-10-28 03:11:46
我将AutoMapper用例解释为暗示它只需从src获取实例成员,但您肯定是这样,对于静态成员来说,同样的技术也是适用的。 – dahlbyk 2010-10-28 03:18:06
一切正常,除了源代码是一个“var”.Select()投影,它具有一个“object”类型,并且AutoMapper没有找到任何要映射的字段。大声笑。 – 2010-10-28 03:24:29