【问题标题】:Automapper: Mapping an object to a LISTAutomapper:将对象映射到 LIST
【发布时间】:2021-07-08 11:14:50
【问题描述】:

我有一个类型SupportedCurrencies,其中包含Currency 类型的对象列表:

  public class SupportedCurrencies
        {
            public List<Currency> Currencies { get; set; }
        }
  public class Currency
    {
        public string Code { get; set; }    
        public string AmountMin { get; set; }
        public string AmountMax { get; set; }
    }

我想将它映射到SupportedCurrency 类型的对象列表:

    public class SupportedCurrency
    {
        public string CurrencyCode { get; set; }
        public string MinAmount { get; set; }
        public string MaxAmount { get; set; }
    }

在我的映射配置文件中,我有以下映射:

CreateMap<Response.Currency, SupportedCurrency>()
            .ForMember(p => p.MinAmount, q => q.MapFrom(r => r.AmountMin))
            .ForMember(p => p.MaxAmount, q => q.MapFrom(r => r.AmountMax))
            .ForMember(p => p.CurrencyCode, q => q.MapFrom(r => r.Code));

CreateMap<SupportedCurrencies, IList<SupportedCurrency>>().ConvertUsing(MappingFunction);

转换器看起来像这样:

 private IList<SupportedCurrency> MappingFunction(SupportedCurrencies arg1, IList<SupportedCurrency> arg2, ResolutionContext arg3)
        {
            foreach (var item in arg1.Currencies)
            {
                arg2.Add(arg3.Mapper.Map<SupportedCurrency>(item)); 
            }
            return arg2;
        }

但是当我尝试映射它时:

_mapper.Map<IList<SupportedCurrency>>(obj01.SupportedCurrencies);

我得到一个异常说:

Method 'get_Item' in type 'Proxy_System.Collections.Generic.IList`1 is not implemented.

我做错了什么?

【问题讨论】:

    标签: c# .net-core automapper


    【解决方案1】:

    CreateMap 的静态版本已删除:AutoMapper.Mapper does not contain definition for CreateMap

    我不知道你是否有升级的选择。但是使用最新的AutoMapper (10.1.1),下面的代码可以工作(你没有给出完整的代码,所以我创建了SupportedCurrencies 的对象)

                var config = new MapperConfiguration(cfg => {
                    cfg.CreateMap<Currency, SupportedCurrency>()
                        .ForMember(p => p.MinAmount, q => q.MapFrom(r => r.AmountMin))
                        .ForMember(p => p.MaxAmount, q => q.MapFrom(r => r.AmountMax))
                        .ForMember(p => p.CurrencyCode, q => q.MapFrom(r => r.Code));
    
                });
    
    
                SupportedCurrencies supportedCurrencies = new SupportedCurrencies();
                IMapper mapper = config.CreateMapper();
                mapper.Map<IList<SupportedCurrency>>(supportedCurrencies);
    
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多