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

使用AutoMapper时如何忽略无公开getter的目标类属性

AutoMapper忽略无公共Getter目标属性的解决方案

报错原因

AutoMapper解析opt => opt.nameSpecial这类属性选择lambda时,默认会访问属性的get访问器完成属性合法性校验,目标属性无对外可访问的get方法时就会触发该报错。

可行解决方案

方案1:使用属性名字符串重载(最推荐,无侵入性)

直接调用ForMember的字符串参数重载,按属性名匹配目标属性,无需通过lambda访问get方法,可直接绕过访问性校验:

.ForMember("nameSpecial", src => src.Ignore())

方案2:单独为映射规则启用非公共成员访问

如果该目标类存在多个类似的非公开访问属性,可以在创建该类的映射规则时,单独开启非公共成员访问权限:

// 源类型、目标类型替换为你实际的业务类型即可
CreateMap<SourceClass, TargetClass>(opt => opt.IncludeNonPublicMembers())
    .ForMember(opt => opt.nameSpecial, src => src.Ignore());

方案3:全局调整属性映射校验规则

如果项目中大量存在无公共get方法的属性需要映射,可以全局修改AutoMapper的属性映射判定逻辑,只要属性存在可访问的set方法就纳入映射范围:

var mapperConfig = new MapperConfiguration(cfg =>
{
    // 调整规则:只要属性有公共set方法就视为可映射
    cfg.ShouldMapProperty = prop => prop.SetMethod != null && prop.SetMethod.IsPublic;
    
    // 其余映射配置不变
    cfg.CreateMap<SourceClass, TargetClass>()
        .ForMember(opt => opt.nameSpecial, src => src.Ignore());
});

注意:该方案会修改全局映射规则,调整前需评估对现有映射逻辑的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:48:03