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

AutoMapper配置Profile后仍报Missing type map,提示Object→GroceryItem是什么原因?

报错提到Object类型的原因

你调用mapper.Map<TVeganItem>(entity)时,入参entity的编译时类型是泛型参数TVeganItemEstablishmentDto,AutoMapper在编译阶段无法获取泛型参数的实际类型,只能将其识别为基类object,所以即使运行时entity是具体的Dto类型,报错信息还是会显示源类型为Object。
同时你当前的代码存在映射逻辑错误:你配置的是GroceryItemEstablishmentDto和GroceryItemEstablishment的互转、GroceryItemDto和GroceryItem的互转,没有配置GroceryItemEstablishmentDto直接转GroceryItem的映射规则,这也是报错的核心原因。

解决方案

根据你的业务场景选择对应方案即可:

  • 如果你的需求是转换entity中嵌套的VeganItem属性,直接修改映射的源对象即可:
// 原错误写法
var x = mapper.Map<TVeganItem>(entity);
// 修改后写法
var x = mapper.Map<TVeganItem>(entity.VeganItem);
  • 如果确实需要将整个TVeganItemEstablishmentDto实例直接转换为TVeganItem类型,需要在AutoMapper的Profile中补充对应映射规则,示例如下:
public GroceryItemEstablishmentProfile()
{
    // 原有映射保留
    CreateMap<GroceryItemEstablishment, GroceryItemEstablishmentDto>();
    CreateMap<GroceryItemEstablishmentDto, GroceryItemEstablishment>();
    // 新增EstablishmentDto转GroceryItem的映射
    CreateMap<GroceryItemEstablishmentDto, GroceryItem>()
        // 示例:将EstablishmentDto中VeganItem属性的字段直接映射到目标GroceryItem
        .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.VeganItem.Id))
        .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.VeganItem.Name))
        // 其余字段按需配置
        ;
}
  • 如果是泛型场景下需要规避编译期类型识别问题,可以使用指定运行时类型的Map重载:
var x = (TVeganItem)mapper.Map(entity, entity.GetType(), typeof(TVeganItem));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:09:03