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

如何在AutoMapper自定义TypeConverter中复用自动映射与ForMember逻辑?

AutoMapper 独立转换器实现(保留自动映射+特殊属性配置)
  • 首先修正转换器的泛型参数,你需要实现的是ITypeConverter<Order, OrderDto>,而非原代码中的ITypeConverter<OrderEntity, Order>。
  • 转换器属于映射执行阶段,不需要也不能调用CreateMap(这是配置阶段API)。要保留自动映射同名同类型属性的逻辑,可通过ResolutionContext中的Mapper先完成基础属性映射,再手动处理特殊属性。

正确的转换器代码

public class OrderModelTypeConverter : ITypeConverter<Order, OrderDto>
{
    public OrderDto Convert(Order source, OrderDto destination, ResolutionContext context)
    {
        // 初始化目标对象(如果传入null的话)
        destination = destination ?? new OrderDto();
        // 让AutoMapper自动映射所有匹配的属性
        context.Mapper.Map(source, destination);

        // 替换原ForMember中的特殊属性处理逻辑
        // 示例:处理Name属性
        destination.Name = /* 你的自定义逻辑,比如source.Customer.Name + source.OrderNo */;
        // 示例:处理Points属性
        destination.Points = /* 你的自定义计算逻辑,比如source.TotalAmount * 0.1 */;

        return destination;
    }
}

Profile中的配置

// 在AutoMappingProfiles中只需配置一行即可复用转换器逻辑
CreateMap<Order, OrderDto>().ConvertUsing(new OrderModelTypeConverter());

补充说明

  • 如果特殊属性涉及嵌套对象转换,也可以通过context.Mapper.Map复用其他已配置的映射规则,比如destination.UserInfo = context.Mapper.Map<UserInfoDto>(source.User);
  • 这种实现方式既保留了AutoMapper自动映射的便捷性,又将自定义逻辑封装在独立类中,方便跨项目直接引用复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:33:22