自动映射程序:从自动映射的对象中解析源属性名称
本文关键字:属性 对象 映射程序 映射 | 更新日期: 2023-09-27 17:59:31
给定以下类:
public class User
{
public int Id {get;set;}
public PersonName Name {get;set;}
}
public class PersonName
{
public string FirstName {get;set;}
public string LastName {get;set;}
}
public class UserDto
{
public int Id {get;set;}
public string FirstName {get;set;}
}
以及以下映射配置:
Mapper.CreateMap<User, UserDto>()
.ForMember(destination => destination.FirstName,
options => options.MapFrom(source => source.Name.FirstName))
是否可以解析目标对象上给定属性的源属性名称:
类似于:
Assert.AreEqual(GetSourcePropertyName<User, UserDto>("FirstName"), "Name.FirstName")
因为MapFrom()采用lambda,所以目标属性可能映射到任何东西。你可以使用任何你想要的lambda。考虑一下:
.ForMember(
destination => destination.FullName,
options => options.MapFrom(source => source.Name.FirstName + " " + source.Name.LastName)
);
因为您不必制作简单的属性访问器lambdas,所以无法将源表达式简化为简单的属性名称字符串。
如果MapFrom()采用Expression<Func<TSource, TMember>>
,则可以将表达式转换为字符串,但不能按照当前的编写方式进行。