3

好的,关于 AutoMapper 的完全菜鸟问题。

员工模型对象。

public class Employee {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public decimal HourlyRate { get; set; }
    public List<string> EmailAddresses { get; set; }
}

对象:

public class UpdateEmployeeDetailsDto {
    public decimal HourlyRate { get; set; }
    public string EmailAddress1 { get; set; }
    public string EmailAddress2 { get; set; }
}

我想将 DTO 映射到 Employee 对象,并将 EmailAddress1 和 EmailAddress2 变成一个列表。

我已经在 google 和 SO 上搜索过这种类型的东西,但是我发现的示例我无法将它们翻译成工作代码。

有什么帮助吗?

4

2 回答 2

3

用于AfterMap提供自定义映射(在您的情况下从属性创建列表):

Mapper.CreateMap<UpdateEmployeeDetailsDto, Employee>()
      .AfterMap((dto, e) => e.EmailAddresses = new List<string>() {
          dto.EmailAddress1,
          dto.EmailAddress2
      });
于 2013-01-14T16:54:14.357 回答
2

除了@lazyberezovsky 所说的,您还可以创建一个自定义解析器:

 public class CustomResolver : ValueResolver<UpdateEmployeeDetailsDto, List<string>>
  {
    protected override List<string> ResolveCore(UpdateEmployeeDetailsDto source)
    {
        return new List<string> { source.EmailAddress1, source.EmailAddress2 }
    }
  }

Mapper.CreateMap<UpdateEmployeeDetailsDto, Employee>()
  .ForMember(dest => dest.EmailAddresses, opt => opt.ResolveUsing<CustomResolver>());

重点是什么?您可以使其更通用并使用它来解决案例Value1Value2...映射Value3ValueNList<ValueType> Values

于 2013-01-14T17:05:04.623 回答