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

如何使用AutoMapper映射单层对象到属性不匹配的嵌套结构

AutoMapper映射配置方案

1. 前置准备

首先安装所需NuGet包:

  • 核心基础包:AutoMapper
  • 若为ASP.NET Core项目,可额外安装依赖注入扩展包:AutoMapper.Extensions.Microsoft.DependencyInjection

2. 核心映射配置

推荐通过AutoMapper的Profile类统一管理映射规则,由于源和目标的Employee类同名,建议通过命名空间区分两类避免冲突,配置示例如下:

using AutoMapper;
// 引入源实体所在命名空间
using Source = YourSourceNamespace;
// 引入目标实体所在命名空间
using Target = YourTargetNamespace;

public class CustomMappingProfile : Profile
{
    public CustomMappingProfile()
    {
        CreateMap<Source.Employee, Target.Employee>()
            // 映射姓名字段,AutoMapper默认忽略属性名大小写,此处显式配置更易维护
            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.name))
            // 手动映射嵌套Location对象
            .ForMember(dest => dest.Location, opt => opt.MapFrom(src => new Target.Location
            {
                City = src.city_name,
                State = src.State_name
            }));
    }
}

3. 初始化与使用

非依赖注入场景(如控制台应用)

// 加载映射配置
var mapperConfig = new MapperConfiguration(cfg =>
{
    cfg.AddProfile<CustomMappingProfile>();
});
// 验证配置正确性,开发阶段建议开启,可提前发现映射遗漏
mapperConfig.AssertConfigurationIsValid();
// 创建Mapper实例
var mapper = mapperConfig.CreateMapper();

// 测试映射
var sourceEmployee = new Source.Employee
{
    name = "张三",
    city_name = "杭州",
    State_name = "浙江"
};
var targetEmployee = mapper.Map<Target.Employee>(sourceEmployee);

ASP.NET Core依赖注入场景

在Program.cs中注册AutoMapper即可:

var builder = WebApplication.CreateBuilder(args);
// 注册AutoMapper,自动扫描所有Profile类
builder.Services.AddAutoMapper(typeof(CustomMappingProfile));
// 其他服务注册...

var app = builder.Build();
// 中间件配置...
app.Run();

后续使用时直接在构造函数注入IMapper接口调用即可。

4. 可选优化:复用Location映射规则

如果存在多个场景需要从源Employee映射到Location类型,可以单独抽离Location的映射规则,提高代码复用性:

public class CustomMappingProfile : Profile
{
    public CustomMappingProfile()
    {
        // 单独配置Employee到Location的映射
        CreateMap<Source.Employee, Target.Location>()
            .ForMember(dest => dest.City, opt => opt.MapFrom(src => src.city_name))
            .ForMember(dest => dest.State, opt => opt.MapFrom(src => src.State_name));

        // Employee之间的映射可简化为
        CreateMap<Source.Employee, Target.Employee>()
            .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.name))
            .ForMember(dest => dest.Location, opt => opt.MapFrom(src => src));
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:15:02