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

如何使用C# AutoMapper将扁平ViewModel映射到嵌套DTO

实现从扁平ViewModel到嵌套DTO的直接AutoMapper映射

下面提供两种简洁实现方式,核心是通过AutoMapper的映射规则配置,让框架自动处理扁平对象到嵌套对象的转换:

方法1:自定义Profile配置映射规则(推荐)

创建继承自Profile的配置类,集中管理所有映射逻辑,便于后期维护:

public class OrderMappingProfile : Profile
{
    public OrderMappingProfile()
    {
        // 配置OrderView到Order的属性映射
        CreateMap<OrderView, Order>()
            .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.order_id));

        // 配置OrderView到Customer的属性映射
        CreateMap<OrderView, Customer>()
            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.customer_name))
            .ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.customer_last_name));

        // 配置OrderView到OrderDto的嵌套属性映射
        CreateMap<OrderView, OrderDto>()
            .ForMember(dest => dest.Order, opt => opt.MapFrom(src => src))
            .ForMember(dest => dest.Customer, opt => opt.MapFrom(src => src));
    }
}

在项目启动时注册该Profile(以.NET 6+为例):

builder.Services.AddAutoMapper(typeof(OrderMappingProfile));

之后即可通过一行代码完成映射:

var result = _mapper.Map<OrderDto>(orderView);

方法2:直接初始化时链式配置映射规则

若不想单独创建Profile类,可在AutoMapper初始化时一次性完成所有配置:

var configuration = new MapperConfiguration(cfg =>
{
    cfg.CreateMap<OrderView, Order>()
        .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.order_id));

    cfg.CreateMap<OrderView, Customer>()
        .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.customer_name))
        .ForMember(dest => dest.LastName, opt => opt.MapFrom(src => src.customer_last_name));

    cfg.CreateMap<OrderView, OrderDto>()
        .ForMember(dest => dest.Order, opt => opt.MapFrom(src => cfg.CreateMapper().Map<Order>(src)))
        .ForMember(dest => dest.Customer, opt => opt.MapFrom(src => cfg.CreateMapper().Map<Customer>(src)));
});

var _mapper = configuration.CreateMapper();

同样支持一行代码完成映射:

var result = _mapper.Map<OrderDto>(orderView);

补充说明

  • 虽然AutoMapper支持下划线转驼峰的默认命名映射,但显式配置所有跨层级/名称不一致的映射,能提升代码可读性并避免潜在的映射错误。
  • 自定义Profile的方式更适合大型项目,可按模块拆分映射规则,便于管理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:05:08