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

AutoMapper映射包含嵌套Data类属性的类时出现类型错误,是什么原因?

报错原因

  • 你定义的两组Data、Account、LinkedCard、JointParty、Transaction类虽然代码结构完全一致,但属于不同命名空间下的独立类型:源端的上述类型归属AccountManagement.Domain命名空间,目标端的归属AccountManagement.Application.Dtos.CASADetails命名空间,C#会将其判定为完全不相关的类型
  • 你只配置了顶层CASADetails到CASADetialsResponse的映射规则,没有配置内部嵌套的复杂类型的映射规则,AutoMapper无法自动完成不同类型的data属性赋值,因此抛出映射错误
  • 你注释掉data属性后没有需要映射的复杂类型,基础类型string、List<object> AutoMapper可以自动转换,因此运行正常

解决方法

方法1:补充所有嵌套复杂类型的映射规则

在你的CASADetailsProfile里补充嵌套类型的映射配置即可,AutoMapper会自动按照属性名匹配完成映射:

public class CASADetailsProfile : Profile
{
    public CASADetailsProfile()
    {
        // 源 -> 目标
        CreateMap<CASADetialsRequest, CASADetails>();
        // 补充嵌套类型映射,替换命名空间为你项目实际命名空间即可
        CreateMap<Domain.LinkedCard, Dtos.CASADetails.LinkedCard>();
        CreateMap<Domain.JointParty, Dtos.CASADetails.JointParty>();
        CreateMap<Domain.Account, Dtos.CASADetails.Account>();
        CreateMap<Domain.Transaction, Dtos.CASADetails.Transaction>();
        CreateMap<Domain.Data, Dtos.CASADetails.Data>();
        // 顶层映射
        CreateMap<CASADetails, CASADetialsResponse>();
    }
}

方法2:复用公共类定义(推荐)

既然两组类的结构完全一致,你可以把Data、Account、LinkedCard这些公共类型抽到公共项目/公共命名空间下,源和目标类都引用同一个公共类型的定义,这样不需要额外配置嵌套映射,原来的配置就可以直接运行,还能减少重复代码。

方法3:开启AutoMapper自动映射同名类型

如果你不想手动写每个嵌套类型的映射,可以在服务注册时开启全局自动创建类型映射配置:

builder.Services.AddAutoMapper(config => 
{
    config.CreateMissingTypeMaps = true;
}, typeof(CASADetailsProfile));

注意该配置属于全局配置,可能会带来非预期的自动映射行为,生产环境建议优先使用方法1或方法2。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 03:06:08