c# - 使用 Automapper 仅映射一个字段

标签 c# automapper

我正在使用 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/

相关文章:

c# - 如何在 ViewModel 中获取控件的高度

c# - 在 string.Split() 之后有更好的 TRIM() 方法吗?

c# - 如何使用 C# 以编程方式在 OpenFile 对话框中选择文件

c# - 客户端字母多列(列表)排序和过滤

c# - 如何告诉 Automapper 检查所有源属性是否都有目标属性

c# - callvirt .NET 指令如何用于接口(interface)?

c# - Automapper 不映射基础

c# - Automapper 为 T 类型初始化

c# - Windows 8.1 统一项目中的 Automapper 启动异常

c# - 如果源类型和目标类型相同,我们是否需要使用asp.net Auto Mapper