Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AutoMapper:展开时如何使用字符串参数映射自_C#_.net_Automapper - Fatal编程技术网

C# AutoMapper:展开时如何使用字符串参数映射自

C# AutoMapper:展开时如何使用字符串参数映射自,c#,.net,automapper,C#,.net,Automapper,AutoMapper的MapFrom方法有两个重载: .MapFrom(Expression<Func<object, object>> 我尝试了第二个重载,如下所示: .ForMember(dest => dest.Date, opt => opt.MapFrom(order => order.Customer.DateOfBirth)) .ForMember(dest => dest.Date, opt => opt.MapFrom&

AutoMapper的MapFrom方法有两个重载:

.MapFrom(Expression<Func<object, object>>
我尝试了第二个重载,如下所示:

.ForMember(dest => dest.Date, opt => opt.MapFrom(order => order.Customer.DateOfBirth))
.ForMember(dest => dest.Date, opt => opt.MapFrom<DateTime>("Order.Customer.DateOfBirth"))
.formmember(dest=>dest.Date,opt=>opt.MapFrom(“Order.Customer.DateOfBirth”))
但当使用关联的属性时,它不起作用。谁知道在使用扁平化时如何使用第二个过载

我这样问是因为我在寻找一种动态映射的方法;例如:

.ForMember(dest => dest.Date, opt => opt.MapFrom<DateTime>(givenPropertyString))
.formmember(dest=>dest.Date,opt=>opt.MapFrom(givenPropertyString))

提前感谢。

似乎
MapFrom
重载
.MapFrom(字符串)
不能很好地处理嵌套属性(这里可能是我的错误)。但是,对于您的问题,您可以创建一个自定义方法来使用反射获取嵌套的子属性值。并使用它将任何属性值动态映射到
字符串NestedPropertyName

这是自定义方法(方法的源)

您可以在
MapFrom
中动态地(针对任何属性)使用此方法,如下所示

.ForMember(dest => dest.Date, 
            opt => opt.MapFrom(src => GetNestedPropertyValue(src, "Order.Customer.DateOfBirth")));

有几个选项可以使用Automapper动态映射类型

首先,如果源类型在编译时未知,则应该使用AutoMaper
DynamicMap
。它只允许指定目标类型:

var message = Mapper.DynamicMap<ICreateOrderMessage>(order);

可能像“Order.Customer.DateOfBirth”这样的嵌套属性不受支持。

没错,它不适用于嵌套属性。在我看到你的答案之前,我刚刚用这个问题改变了我的问题。@JorritSteetskamp仍然这个答案应该是相关的:)
.ForMember(dest => dest.Date, 
            opt => opt.MapFrom(src => GetNestedPropertyValue(src, "Order.Customer.DateOfBirth")));
var message = Mapper.DynamicMap<ICreateOrderMessage>(order);
Mapper.CreateMap<UserModel, UserDto>()
    .ForMember(dto => dto.FullName, opt => opt.MapFrom<string>("FirstName"));