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

AutoMapper中Array转List映射失败,配置后仍提示未映射属性求助

解决AutoMapper中Array转List的未映射属性问题

你遇到的问题其实是两个细节导致的:一是重复创建了Mapper配置且校验的是未包含正确规则的实例,二是源和目标属性名不匹配,AutoMapper无法自动识别映射关系。下面一步步帮你解决:

问题根源拆解

  1. 配置冲突:你先用Mapper.Initialize定义了包含映射规则的全局配置,但随后又新建了一个完全独立的MapperConfiguration,这个新实例里的CreateMap没有添加ForMember规则,对它执行AssertConfigurationIsValid()自然会抛出未映射的异常。
  2. 属性名不匹配:你的Origin类属性叫array,Destination类属性叫list,属性名不一样,AutoMapper没办法自动匹配,必须显式指定映射关系。

修正后的可运行代码

using AutoMapper;
using System;
using System.Collections.Generic;

namespace PocArrayListMap
{
    class Destination
    {
        public List<string> list = new List<string>();
    }

    class Origin
    {
        public string[] array;
    }

    class Program
    {
        static void Main(string[] args)
        {
            // 创建唯一的Mapper配置,包含正确的映射规则
            var config = new MapperConfiguration(cfg => 
            {
                cfg.CreateMap<Origin, Destination>()
                   .ForMember(dest => dest.list, opt => opt.MapFrom(src => src.array));
                // 注意:AutoMapper会自动把string[]转换成List<string>,不需要手动调用ToList()
            });
            
            config.AssertConfigurationIsValid(); // 现在校验可以通过
            
            var mapper = config.CreateMapper();
            var o = new Origin() { array = new string[] { "one", "two", "three" } };
            var d = mapper.Map<Destination>(o);
            
            Console.WriteLine(string.Join(", ", d.list)); // 输出:one, two, three
        }
    }
}

额外注意事项

  • AutoMapper 6.x及以上版本,推荐使用MapperConfiguration创建IMapper实例,而不是依赖全局的Mapper静态类,这样配置更清晰,也方便后续做单元测试。
  • 如果源和目标的属性名完全一致,AutoMapper会自动处理数组和List<T>之间的转换,不需要额外写规则;只有属性名不同时,才需要用ForMember指定映射关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:12:51