Automapper:从自动映射的对象中解析源属性名称

5

给定以下类:

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")
1个回答

8

因为MapFrom()方法接受一个lambda表达式,所以目标属性可以映射到任何内容。您可以使用任何想要的lambda表达式。例如:

.ForMember(
    destination => destination.FullName,  
    options => options.MapFrom(source => source.Name.FirstName + " " + source.Name.LastName)
);

因为你不必强制使用简单的属性访问器lambda表达式,所以你无法将源表达式减少为简单的属性名称字符串。
如果MapFrom()接受Expression<Func<TSource,TMember>>,那么可以将表达式转换为字符串,但按照当前的编写方式是无法完成的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接