如何使用Automapper将UserDTO映射至带方法赋值的User类
实现UserDTO到User的映射(通过方法设置属性)
由于User类的属性仅提供私有setter,必须通过同名方法设置值,你需要在AutoMapper配置中自定义映射逻辑,使用AfterMap回调来手动调用这些方法。
修改后的Mapper配置
MapperConfiguration config = new(cfg => { cfg.CreateMap<User, UserDTO>(); cfg.CreateMap<UserDTO, User>() .AfterMap((dto, user) => { user.Name(dto.Name); user.Age(dto.Age); user.Active(dto.Active); }); });
原理说明
AfterMap会在AutoMapper完成基础映射后执行指定的回调逻辑,这里直接调用User类的设置方法,将UserDTO的属性值传递过去。- 无需额外忽略属性,因为AutoMapper默认无法对私有setter的属性赋值,不会产生冲突;如果担心可以显式添加
.ForMember(dest => dest.Name, opt => opt.Ignore())这类配置,效果一致。
使用方式
按照你期望的方式调用即可:
userDTO.Name = "John Doe"; Mapper.Map(userDTO, user);
执行后会自动调用user.Name("John Doe")、user.Age(userDTO.Age)和user.Active(userDTO.Active)完成属性设置。
内容的提问来源于stack exchange,提问作者stuxamber
相关产品推荐
相关产品推荐

