C# AutoMapper:展开时如何使用字符串参数映射自
AutoMapper的MapFrom方法有两个重载: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&
.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"));