AutoMapper映射含列表与分页值的元组到ResponseModel报错如何解决
错误原因
AutoMapper的ForMember方法仅支持指定目标类型的顶层单个成员,你之前的写法里直接在dest => dest.ExternalAPIResponse.Select(...)位置试图配置集合内部元素的映射规则,不符合AutoMapper的配置要求,所以触发了对应异常。
正确配置方案
有两种常用的正确配置方式,可根据业务复用需求选择:
方案1:拆分映射规则(推荐,可复用性更高)
先单独配置Contact到ExternalAPIResponseModel的元素映射规则,再配置值元组到ResponseModel的顶层映射,AutoMapper会自动处理集合类型的转换。
// 第一步:配置单元素映射规则 CreateMap<Contact, ExternalAPIResponseModel>() .ForMember(dest => dest.Address, opt => opt.MapFrom(src => src.ContactAddress1)) .ForMember(dest => dest.CompanyName, opt => opt.MapFrom(src => src.HqcompanyName)) .ForMember(dest => dest.JobFunction, opt => opt.MapFrom(src => src.IdjobFunctionNavigation.JobFunction1)) .ForMember(dest => dest.JobLevel, opt => opt.MapFrom(src => src.IdjobLevelNavigation.JobLevel1)) .ForMember(dest => dest.Phone, opt => opt.MapFrom(src => src.ContactPhone)) .ForMember(dest => dest.State, opt => opt.MapFrom(src => src.ContactState)); // FirstName、LastName、Email属性名两边一致,AutoMapper会自动映射,无需额外配置 // 第二步:配置值元组到ResponseModel的映射 CreateMap<(IEnumerable<Contact> Contacts, int pagesCount), ResponseModel>() .ForMember(dest => dest.ExternalAPIResponse, opt => opt.MapFrom(src => src.Contacts)) .ForMember(dest => dest.TotalPageCount, opt => opt.MapFrom(src => src.pagesCount));
方案2:直接在集合映射时手动转换(适合一次性场景)
如果不需要复用Contact到ExternalAPIResponseModel的映射规则,也可以直接在顶层属性的映射配置里完成集合转换:
CreateMap<(IEnumerable<Contact> Contacts, int pagesCount), ResponseModel>() .ForMember(dest => dest.ExternalAPIResponse, opt => opt.MapFrom(src => src.Contacts.Select(c => new ExternalAPIResponseModel { Address = c.ContactAddress1, CompanyName = c.HqcompanyName, FirstName = c.FirstName, LastName = c.LastName, JobFunction = c.IdjobFunctionNavigation?.JobFunction1, JobLevel = c.IdjobLevelNavigation?.JobLevel1, Email = c.Email, Phone = c.ContactPhone, State = c.ContactState }))) .ForMember(dest => dest.TotalPageCount, opt => opt.MapFrom(src => src.pagesCount));
调用说明
控制器中的调用代码不需要修改,和原有写法保持一致即可:
var mappedResult = _mapper.Map<ResponseModel>(result);
内容的提问来源于stack exchange,提问作者Sargis
相关产品推荐
相关产品推荐

