You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AutoMapper映射RegisterVm与RegistrationRequest类时出错求助

AutoMapper双向映射错误解决

我定义了RegisterVm和RegistrationRequest两个类,尝试通过CreateMap<RegisterVm, RegistrationRequest>().ReverseMap();实现双向映射,但触发了映射错误。类代码如下:

public class RegisterVm
{
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    public string Mobile { get; set; }
    [Required]
    public string UserName { get; set; }
    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }
}

public class RegistrationRequest
{
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
    [Required]
    public string Mobile { get; set; }
    [Required]
    public string UserName { get; set; }
    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }
}

错误截图:AutoMapper映射错误

排查与解决步骤

  1. 确认AutoMapper配置类已正确注册
    必须将包含映射规则的Profile类注册到服务容器中,否则AutoMapper无法识别你的映射配置。

    • 先创建映射配置类:
      public class AppMappingProfile : Profile
      {
          public AppMappingProfile()
          {
              CreateMap<RegisterVm, RegistrationRequest>().ReverseMap();
          }
      }
      
    • 在项目启动文件中注册:
      // .NET Core/.NET 5+ Program.cs示例
      builder.Services.AddAutoMapper(typeof(AppMappingProfile));
      
  2. 避免使用静态Mapper方法,改用依赖注入
    AutoMapper 9.0+已弃用静态Mapper.Map方法,强制使用依赖注入获取IMapper实例:

    public class YourControllerOrService
    {
        private readonly IMapper _mapper;
    
        public YourControllerOrService(IMapper mapper)
        {
            _mapper = mapper;
        }
    
        public void YourMethod()
        {
            var vm = new RegisterVm();
            // 正向映射
            var request = _mapper.Map<RegistrationRequest>(vm);
            // 反向映射
            var reversedVm = _mapper.Map<RegisterVm>(request);
        }
    }
    
  3. 处理Nullable引用类型问题
    如果项目启用了Nullable引用类型(项目文件中<Nullable>enable</Nullable>),类中未初始化的字符串属性会触发空引用相关警告或错误。可以给属性设置默认值:

    public string FirstName { get; set; } = string.Empty;
    

    或者在映射时配置允许空值:

    CreateMap<RegisterVm, RegistrationRequest>()
        .ForAllMembers(opt => opt.AllowNull())
        .ReverseMap();
    
  4. 验证属性映射匹配性
    虽然两个类属性完全一致,但如果存在隐性差异(比如命名空间冲突),可以显式指定映射规则确保匹配:

    CreateMap<RegisterVm, RegistrationRequest>()
        .ForMember(dest => dest.FirstName, opt => opt.MapFrom(src => src.FirstName))
        .ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.LastName))
        .ForMember(dest => dest.Mobile, opt => opt.MapFrom(src => src.Mobile))
        .ForMember(dest => dest.UserName, opt => opt.MapFrom(src => src.UserName))
        .ForMember(dest => dest.Password, opt => opt.MapFrom(src => src.Password))
        .ReverseMap();
    

内容的提问来源于stack exchange,提问作者Hamed Salemi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 22:23:12