c# - AutoMapper:如何在展平时使用字符串参数 MapFrom

标签 c# .net automapper

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/

相关文章:

c# - 如何在文件不再打开时立即收到通知?

c# - InvokeRequired 在新创建的 Dialog 上

c# - 如何忽略所有标记为虚拟的属性

c# - 属性名称不同时如何指定映射规则

c# - 在类库中使用 Automapper 进行 Ninject

c# - WPF PathGeometry 更新速度_SLOW_

c# - 替换字符串中第 N 个正则表达式匹配项

c# - 从抽象类引用继承的 EntitySet 的 dapper PropInfo Setter 为 null

c# - 如何使用 NHibernate Criteria API 进行多重连接

c# - 如何在 asp.net 中将参数添加到操作过滤器?