用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)
这样的方法,它只返回一个映射值(将被分配给完整映射中的指定字段)。有没有办法,我可以做到这一点,而不映射整个对象,并从结果中提取值?
首先创建一个解析器,然后在映射器调用中使用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))