自动映射 - 对于 IEnumerable 映射具有不同名称的多个属性

Automapping - for IEnumerable map multiple properties with different name

我有两个class 说:

  public class SourceData
        {
            public string SourceCode { get; set; }        
            public string SourceName { get; set; }
        }

public class DestData
    {
        public string Code { get; set; }
        public string DestName { get; set; }
    }

我尝试将 SourceData 的 IEnumerable 映射到 DestData,但它不起作用

我试试

AutoMapper.Mapper.CreateMap<IEnumerable<SourceData >, IEnumerable<DestData>>()

Mapper.Map>(someDataEnum)你把SourceData映射到DestData了吗?您不必映射集合。

var configuration = Mapper.Configuration;

configuration.CreateMap<SourceData, DestData>()
    .ForMember(lite => lite.Code, src => src.MapFrom(post => post.SourceCode))
    .ForMember(lite => lite.DestName, src => src.MapFrom(post => post.SourceName))

并映射

var destDataCollection= Mapper.Map<IEnumerable<SourceData>, IEnumerable<DestData>>(sourceDataCollection);

两个 类 都有不同名称的字段。 AutoMapper 不会自动拾取它们。所以你需要明确地告诉它如何映射 类 中的字段。你这样做吧。

Mapper.CreateMap<SourceData, DestData>()
   .ForMember(dest => dest.DestName, a => a.MapFrom(src => src.SourceName))
   .ForMember(dest => dest.Code, a => a.MapFrom(src => src.SourceCode))

请注意,您是在类型本身之间创建映射,而不是在类型集合之间创建映射,因为 AutoMapper 会自动处理集合。接下来只需使用以下映射:

var destList= Mapper.Map<List<DestData>>(sourceList);

Mapper.Map<List<SourceData>, List<DestData>>(sourceList, destList);

视情况而定。