我使用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