AutoMapper复杂对象映射报错:缺失类型映射配置该如何解决?
解决AutoMapper复杂对象集合映射的「Missing type map configuration or unsupported mapping」异常
问题场景
我用AutoMapper实现简单对象映射时运行正常,相关代码如下:
简单对象定义
public class Source { public int Id { get; set; } public string Name { get; set; } } public class Destination { public int Id { get; set; } public string Name { get; set; } }
映射使用代码(SampleClass.cs)
using AutoMapper; public class SampleClass { private IMapper _mapper; public SampleClass(IMapper mapper) { _mapper = mapper; } public void Logic(Source source) { var dest = _mapper.Map<Destination>(source); } }
但当映射包含集合的复杂对象时,执行映射代码抛出「Missing type map configuration or unsupported mapping.」异常,复杂对象结构及映射代码如下:
复杂对象定义
public class Source { public int Id { get; set; } public string Name { get; set; } public List<SourceChild> lstChild { get; set; } } public class SourceChild { public string Address { get; set; } } public class Destination { public int Id { get; set; } public string Name { get; set; } public List<SourceDestination> lstChild { get; set; } } public class SourceDestination { public string Address { get; set; } }
报错的映射代码
public void Logic(Source source) { var dest = _mapper.Map<Destination>(source); }
解决方案
你需要补充AutoMapper的映射配置,明确主对象之间以及子对象之间的映射关系,具体步骤如下:
创建映射Profile类
定义一个继承自Profile的类,在构造函数中配置所有需要的映射规则,包括主对象和子对象的映射:using AutoMapper; public class MappingProfile : Profile { public MappingProfile() { // 配置主对象映射 CreateMap<Source, Destination>(); // 配置子对象映射(AutoMapper会自动处理集合映射,只要子对象映射规则存在) CreateMap<SourceChild, SourceDestination>(); } }注册AutoMapper并加载Profile
在项目的依赖注入配置中(比如ASP.NET Core的Program.cs或Startup.cs),注册AutoMapper并指定要加载的Profile:// .NET 6+ Program.cs示例 builder.Services.AddAutoMapper(typeof(MappingProfile));修正代码拼写错误
注意你原代码中Logic方法的参数写成了Souce(少了一个r),需修正为Source,否则会出现编译错误。
完成以上配置后,AutoMapper就能正确识别集合中子对象的映射规则,顺利完成复杂对象的映射。
内容的提问来源于stack exchange,提问作者VA1267
相关产品推荐
相关产品推荐

