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

Automapper映射带私有setter属性时配置ForMember仍赋值失败怎么办

问题原因

  • 核心配置错误:你当前创建的是IDbCoverage到ICoverage接口的映射规则,但实际映射的目标类型是实现了ICoverage的Coverage类,AutoMapper不会自动将接口层面的映射规则应用到其实现类上,导致你针对CoverageCodeDesc的配置完全未生效。
  • AutoMapper默认仅映射公共可写属性,私有setter的属性默认不会被自动纳入映射范围,需要额外配置。

修复方案

方案1:直接配置到具体实现类的映射规则

这是最直接的修复方式,显式指定源到Coverage类的映射:

var config = new MapperConfiguration(cfg => {
    cfg.CreateMap<IDbCoverage, Coverage>()
        .ForMember(dest => dest.CoverageCodeDesc, conf => conf.MapFrom(src => src.CoverageCodeDesc)); 

    // 如果你的业务中需要通过ICoverage接口作为映射目标,新增下面的配置即可,AutoMapper会自动解析到Coverage实现类
    cfg.CreateMap<IDbCoverage, ICoverage>().As<Coverage>();
});

方案2:全局开启私有setter属性映射支持

如果项目中有大量带私有setter的属性需要映射,可以修改全局规则避免重复配置:

var config = new MapperConfiguration(cfg => {
    // 全局允许带私有setter的公共属性参与映射
    cfg.ShouldMapProperty = p => 
        p.GetMethod.IsPublic 
        || (p.SetMethod != null && (p.SetMethod.IsPrivate || p.SetMethod.IsFamily));
    
    cfg.CreateMap<IDbCoverage, Coverage>()
        .ForMember(dest => dest.CoverageCodeDesc, conf => conf.MapFrom(src => src.CoverageCodeDesc)); 

    cfg.CreateMap<IDbCoverage, ICoverage>().As<Coverage>();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 04:42:02