AutoMapper 的 MapFrom 方法有两个重载:
.MapFrom(Expression<Func<object, object>>
和
.MapFrom<TMember>(string)
第一个重载可以这样使用:
.ForMember(dest => dest.Date, opt => opt.MapFrom(order => order.Customer.DateOfBirth))
我尝试了这样的第二个重载:
.ForMember(dest => dest.Date, opt => opt.MapFrom<DateTime>("Order.Customer.DateOfBirth"))
但是当使用关联的属性时它不起作用。谁知道在使用展平时如何使用第二个重载?
我问这个是因为我在寻找一种动态映射的方法;例如:
.ForMember(dest => dest.Date, opt => opt.MapFrom<DateTime>(givenPropertyString))
提前致谢。
最佳答案
好像是 MapFrom
过载 .MapFrom<TMember>(string)
不适用于嵌套属性(我可能在这里错了)。但是,对于您的问题,您可以创建一个自定义方法来使用反射获取嵌套的子属性值。并使用它来动态映射任何属性值 string NestedPropertyName
.
这是自定义方法(方法来源 here)
public static object GetNestedPropertyValue(object obj, string nestedDottedPropertyName)
{
foreach (String part in nestedDottedPropertyName.Split('.'))
{
if (obj == null)
return null;
PropertyInfo info = obj.GetType().GetProperty(part);
if (info == null)
return null;
obj = info.GetValue(obj, null);
}
return obj;
}
您可以在
MapFrom
中使用此方法动态(对于任何属性),像这样.ForMember(dest => dest.Date,
opt => opt.MapFrom(src => GetNestedPropertyValue(src, "Order.Customer.DateOfBirth")));
关于c# - AutoMapper:如何在展平时使用字符串参数 MapFrom,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32935112/