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

AutoMapper 12.0.1升级后自定义值解析器致AssertConfigurationIsValid()失败

解决AutoMapper 12升级后AssertConfigurationIsValid验证失败问题

问题根源

AutoMapper 12对配置验证逻辑做了严格升级:当映射逻辑使用非直接源属性访问的方式(比如调用静态方法、自定义解析器)时,框架无法自动识别对应的源属性已被使用。在MemberList.Source验证模式下,会判定这些源属性为“未映射”,从而触发报错。

解决方案

针对被间接使用的源属性,通过ForSourceMember显式标记为无需验证,告知AutoMapper这些属性已被处理。

修改后的映射配置代码

// CreateCodesetRequest 映射配置
CreateMap<CreateCodesetRequest, Codeset>(MemberList.Source)
    .ForMember(dest => dest.Name, opt => opt.MapFrom(src => NameableResolver.Trim(src.Name)))
    .ForMember(dest => dest.NormalizedName, opt => opt.MapFrom(src => src.Name.ToNormalizedString()))
    .ForSourceMember(src => src.Visibility, opt => opt.DoNotValidate())
    .ForSourceMember(src => src.Name, opt => opt.DoNotValidate()); // 新增:标记Name属性无需验证

// UpdateCodesetRequest 映射配置
CreateMap<UpdateCodesetRequest, Codeset>(MemberList.Source)
    .ForMember(dest => dest.Name, opt => opt.MapFrom(src => NameableResolver.Trim(src.Name)))
    .ForMember(dest => dest.CodeGroupType, opt => opt.MapFrom<UpdateCodesetGroupTypeResolver>())
    .ForSourceMember(src => src.Visibility, opt => opt.DoNotValidate())
    .ForSourceMember(src => src.Name, opt => opt.DoNotValidate()) // 新增:标记Name属性无需验证
    .ForSourceMember(src => src.CodeGroupType, opt => opt.DoNotValidate()); // 新增:标记CodeGroupType属性无需验证

说明

  • 该修改不会影响自定义转换逻辑的执行,只是让配置验证跳过对这些已被间接使用的源属性的检查。
  • 如果后续还有类似使用自定义逻辑映射的场景,都需要为对应的源属性添加ForSourceMember(src => src.XXX, opt => opt.DoNotValidate())。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 03:26:05