如何使用AutoMapper将Person类映射到Company类?
使用AutoMapper将Person类映射到Company类的解决方案
由于Person和Company的结构差异较大(单个对象 vs 包含成员列表的对象),AutoMapper无法自动完成映射,需要显式定义自定义映射规则,具体步骤如下:
1. 安装AutoMapper包
首先确保已安装必要的NuGet包:
Install-Package AutoMapper Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection # 若使用.NET依赖注入
2. 创建映射配置文件
定义一个继承自Profile的配置类,明确字段的映射关系:
public class PersonToCompanyProfile : Profile { public PersonToCompanyProfile() { // 配置Person到Company的映射 CreateMap<Person, Company>() // 将Person的Name映射到Company的Name .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.Name)) // 将单个Person转换为Member并包装成列表,存入Company的Members .ForMember(dest => dest.Members, opt => opt.MapFrom(src => new List<Member> { new Member { Id = src.Id, FullName = src.Name } })); // 可选:单独配置Person到Member的映射,让逻辑更清晰 CreateMap<Person, Member>() .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.Id)) .ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name)); // 若使用上述Person→Member映射,Company的Members可改为: // .ForMember(dest => dest.Members, opt => opt.ResolveUsing(src => new List<Member> { Map<Member>(src) })) } }
3. 初始化Mapper实例
方式一:直接初始化(非依赖注入场景)
var config = new MapperConfiguration(cfg => { cfg.AddProfile<PersonToCompanyProfile>(); }); var mapper = config.CreateMapper();
方式二:依赖注入注册(ASP.NET Core等场景)
在Program.cs中注册服务:
builder.Services.AddAutoMapper(typeof(PersonToCompanyProfile));
4. 执行映射
// 示例Person对象 var person = new Person { Id = Guid.NewGuid(), Name = "John Doe", Country = "USA", PhoneNumber = "123-456-7890" }; // 映射为Company对象 var company = mapper.Map<Company>(person);
关键说明
- 核心是处理
Company.Members的映射:因为Members是列表类型,需要手动将单个Person转换为Member并包装成列表。 - 如果需要批量将多个
Person映射为Company的Members,只需调整映射逻辑,将IEnumerable<Person>作为源即可。
内容的提问来源于stack exchange,提问作者Milad_Sh
相关产品推荐
相关产品推荐

