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

C# 将展平的字符串映射到列表,c#,automapper,C#,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映射到Emp

好的,完全没有关于汽车制造商的问题

雇员模型对象

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映射到Employee对象,并将EmailAddress1和EmailAddress2转换为一个列表

我在谷歌上搜索过这种类型的东西,但我找到的示例无法将它们转换为工作代码


有任何帮助吗?

使用
AfterMap
提供自定义映射(根据您的案例中的属性创建列表):

Mapper.CreateMap()
.AfterMap((dto,e)=>e.EmailAddresses=新列表(){
dto.EmailAddress1,
dto.EmailAddress2
});

除了@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>());
公共类CustomResolver:ValueResolver
{
受保护的覆盖列表ResolveCore(UpdateEmployeeDetailsTo源)
{
返回新列表{source.EmailAddress1,source.EmailAddress2}
}
}
Mapper.CreateMap()
.FormMember(dest=>dest.EmailAddresses,opt=>opt.ResolveUsing());

重点是什么?您可以使其更通用,并使用它来解决案例
Value1
Value2
Value3
ValueN
映射到
列表值

非常感谢!我会在5分钟内接受你的回答。我希望创建一个简单的以动作为中心的DTO层,映射到模型对象。在大多数情况下,映射将足够简单,那么关于编写解析器的最佳实践是什么,它是否适用于我的问题,或者我会将其用于更复杂的映射?对于简单的情况,另一个答案应该很好。对于同样重复的更复杂的映射,您可以编写CustomResolver。
Mapper.CreateMap<UpdateEmployeeDetailsDto, Employee>()
      .AfterMap((dto, e) => e.EmailAddresses = new List<string>() {
          dto.EmailAddress1,
          dto.EmailAddress2
      });
 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>());