用Automapper只映射一个字段

本文关键字:一个 字段 Automapper 映射 | 更新日期: 2023-09-27 18:02:29

我使用Automapper来定义一些对象之间的映射配置。我需要根据配置检索目的地的单个映射值。

假设我有一个域对象

class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

和相应的DTO

class PersonDTO
{
    public string FullName { get; set; }
}

和映射

Mapper.CreateMap<Person, PersonDTO>()
    .ForMember(
        dest => dest.FullName, 
        opts => opts.MapFrom(src => src.FirstName + " " + src.LastName));

我想要一个像Mapper.MapField<PersonDTO>(person, x => x.FullName)这样的方法,它只返回一个映射值(将被分配给完整映射中的指定字段)。有没有办法,我可以做到这一点,而不映射整个对象,并从结果中提取值?

用Automapper只映射一个字段

首先创建一个解析器,然后在映射器调用中使用resolve using方法。

public class PersonNameResolver : ValueResolver<Person, PersonDTO>
{
    protected override PersonDTO ResolveCore(Person source)
    {
        return new PersonDTO
        {
            FirstName = source.FirstName,
            LastName = source.LastName
        };
    }
}

创建后,在映射器调用中使用以下代码:

Mapper.CreateMap<Person, PersonDTO>()
    .ForMember(
        dest => dest.Name, 
        opts => opts.ResolveUsing<PersonNameResolver>().FromMember(o => o))