我正在使用 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)
这样的方法仅返回一个映射值(将分配给完整映射中的指定字段)。有什么方法可以在不映射整个对象并从结果中提取值的情况下执行此操作?
最佳答案
首先创建一个resolver然后在您的映射器调用中使用 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))
关于c# - 使用 Automapper 仅映射一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31382786/