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

C#中使用AutoMapper自动映射ClassB到ClassC时如何解决属性报错?

解决方案

1. 直接映射同名属性(推荐,无需自定义逻辑时使用)

如果ExtraProperty只需从ClassB直接赋值到ClassC,在原有映射配置基础上明确指定该属性的映射即可(属性名完全一致时也可省略手动指定,AutoMapper会自动处理):

CreateMap<ClassB, ClassC>()
    // 将ClassB实例整体映射到ClassC的classA属性
    .ForMember(c => c.classA, o => o.MapFrom(b => b))
    // 直接映射ExtraProperty,属性名一致时此句可省略
    .ForMember(c => c.ExtraProperty, o => o.MapFrom(b => b.ExtraProperty));

2. 手动自定义处理ExtraProperty

若需要对ExtraProperty做自定义逻辑处理(比如转换值、从其他来源取值),替换MapFrom中的逻辑即可:

// 示例自定义处理方法
private Guid CustomProcessExtraProperty(Guid sourceValue)
{
    // 编写你的自定义逻辑,比如生成新Guid、格式转换等
    return sourceValue; // 替换为实际处理结果
}

// 映射配置
CreateMap<ClassB, ClassC>()
    .ForMember(c => c.classA, o => o.MapFrom(b => b))
    // 用自定义逻辑处理ExtraProperty
    .ForMember(c => c.ExtraProperty, o => o.MapFrom(b => CustomProcessExtraProperty(b.ExtraProperty)));

3. 忽略ExtraProperty并关闭对应验证(无需映射该属性时使用)

如果不需要通过AutoMapper映射ExtraProperty,而是手动在映射后赋值,需要同时忽略目标属性映射并关闭对应验证:

CreateMap<ClassB, ClassC>()
    .ForMember(c => c.classA, o => o.MapFrom(b => b))
    // 忽略ClassC的ExtraProperty,不通过AutoMapper映射
    .ForMember(c => c.ExtraProperty, o => o.Ignore())
    // 关闭成员列表验证,避免因未映射属性触发异常
    .ValidateMemberList(MemberList.None);

也可以仅针对源属性关闭验证,精准避免AutoMapper检查ClassB的ExtraProperty是否被映射:

CreateMap<ClassB, ClassC>()
    .ForMember(c => c.classA, o => o.MapFrom(b => b))
    .ForMember(c => c.ExtraProperty, o => o.Ignore())
    // 不验证ClassB的ExtraProperty是否被映射
    .ForSourceMember(b => b.ExtraProperty, o => o.DoNotValidate());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:53:11