将展平的字符串映射到列表

时间:2013-01-14 16:45:58

标签: c# automapper

关于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; }
}

Dto对象:

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

我想将DTO映射到Employee对象,并将EmailAddress1和EmailAddress2转换为List。

我在google和SO搜索了这类东西,但是我发现我已经发现我无法将它们翻译成工作代码了。

任何帮助?

2 个答案:

答案 0 :(得分:3)

使用AfterMap提供自定义映射(根据您的情况从属性创建列表):

Mapper.CreateMap<UpdateEmployeeDetailsDto, Employee>()
      .AfterMap((dto, e) => e.EmailAddresses = new List<string>() {
          dto.EmailAddress1,
          dto.EmailAddress2
      });

答案 1 :(得分: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>());

重点是什么?您可以将其设置为更通用,并使用它来解决案例Value1Value2Value3 ... ValueN映射到List<ValueType> Values