如何设置匹配属性名称的配置约定是字符串集合

本文关键字:配置 约定 集合 字符串 属性 何设置 设置 | 更新日期: 2023-09-27 18:12:42

我有两个模型:

public class UserModel
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string NetId { get; set; }
    public string Email { get; set; }
    public string Departments { get; set; }
    public string Titles { get; set; }
}

public class UserReport : Entity
{
    public string Name { get; set; }
    public string NetId { get; set; }
    public string Email { get; set; }
    public List<string> Departments { get; set; }
    public List<string> Titles { get; set; }
}

因此我可以这样写我的自动映射器映射:

CreateMap<UserReport, UserModel>()
            .ForMember(x => x.Departments, x => x.MapFrom(y => string.Join("'n", y.Departments)))
            .ForMember(x => x.Titles, x => x.MapFrom(y => string.Join("'n", y.Titles)));

但是,我不想对this的每个实例都这样做,因为这种方法将用于几乎每个POCO到DTO转换。是否有一种方法我可以在配置中写一个约定来检查目标属性名称是否为字符串类型,并且它与list<string>的源类型的属性相匹配以进行字符串连接?

如何设置匹配属性名称的配置约定是字符串集合

映射可以嵌套,所以您只需为List<string>string定义一个额外的映射:

CreateMap<List<string>, string>().ConvertUsing(strings => {
    if (strings != null)
      return string.Join("'n", strings);
    return "";
});