You need to enable JavaScript to run this app. Automapper如何将字符串列表映射为含字符串属性的对象列表
优惠活动
大模型
产品
解决方案
定价
更多

Automapper如何将字符串列表映射为含字符串属性的对象列表

问题原因

你最初的配置失效的核心原因是ReverseMap()无法自动反转自定义的成员转换逻辑:
你仅显式配置了Second -> First方向的ImportantList属性映射规则,调用ReverseMap()后,AutoMapper只会为First -> Second方向生成默认的映射逻辑:仅自动创建对应数量的ImportantListClass实例,但不知道需要将源端的string值赋值给目标实例的Name属性,因此出现Name全为null的问题。

解决方案

方案1:修改原映射配置,显式定义反向映射规则

如果不想单独配置类型转换,可以在原有配置基础上补充反向的属性映射逻辑:

CreateMap<Second, First>()
    .ForMember(dest => dest.ImportantList, opt => opt.MapFrom(src => 
        src.ImportantList.Select(x => x.Name).ToList()))
    // 显式定义反向映射的属性规则
    .ReverseMap()
    .ForMember(dest => dest.ImportantList, opt => opt.MapFrom(src =>
        src.ImportantList.Select(x => new ImportantListClass { Name = x }).ToList()));

方案2:配置全局类型转换(更推荐)

就是你后续补充的实现方式,这种方案的优势是将string和ImportantListClass的转换逻辑全局复用,后续任意涉及这两个类型转换的场景都不需要再单独配置,代码更简洁易维护:

// 两个业务类的基础映射
CreateMap<First, Second>();
CreateMap<Second, First>();

// 配置双向类型转换器
CreateMap<ImportantListClass, string>()
    .ConvertUsing(source => source.Name);
CreateMap<string, ImportantListClass>()
    .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 10:27:05