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

Automapper嵌套映射不同列表对象时ClassA转ClassC无结果如何解决

AutoMapper 嵌套列表映射配置方案

要实现First类到Second类的映射,需要逐层配置三类映射关系:ClassA→ClassC、ClassA→ClassB、First→Second,具体配置如下:


1. 编写映射配置Profile

using AutoMapper;

public class CustomMappingProfile : Profile
{
    public CustomMappingProfile()
    {
        // ClassA和ClassC属性名完全一致,无需额外配置映射规则
        CreateMap<ClassA, ClassC>();

        // ClassA映射到ClassB:将ClassA本身映射到ClassB的Cobj属性
        CreateMap<ClassA, ClassB>()
            .ForMember(dest => dest.Cobj, opt => opt.MapFrom(src => src))
            // 若ClassA中没有对应Email的字段,可省略该行配置,Email会默认赋值为null
            .ForMember(dest => dest.Email, opt => opt.MapFrom(src => "" /* 替换为实际业务的Email取值逻辑 */));

        // First映射到Second:直接将AList映射到BList,AutoMapper会自动处理列表元素的映射
        CreateMap<First, Second>()
            .ForMember(dest => dest.BList, opt => opt.MapFrom(src => src.AList));
    }
}

2. 注册AutoMapper服务(以ASP.NET Core为例)

// 在Program.cs中添加注册逻辑,自动扫描当前程序集的Profile配置
builder.Services.AddAutoMapper(typeof(CustomMappingProfile).Assembly);

3. 调用映射示例

// 构造源对象
var firstSource = new First
{
    AList = new List<ClassA>
    {
        new ClassA { FirstName = "张", LastName = "三" },
        new ClassA { FirstName = "李", LastName = "四" }
    }
};

// 注入IMapper后调用映射方法
var secondResult = _mapper.Map<Second>(firstSource);
// 此时secondResult.BList中每个元素的Cobj属性都会正确赋值对应的FirstName和LastName

若需要实现Second到First的反向映射,只需要在每个CreateMap配置后追加.ReverseMap()方法即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:27:03