【问题标题】:Automapper with resolver throwing "Error mapping types"带有解析器的自动映射器抛出“错误映射类型”
【发布时间】:2017-01-10 15:03:05
【问题描述】:

我们在另一个类中有一个类作为属性,需要使用 Automapper 进行映射。我们编写了一个解析器,它将源类属性映射到destinationMember 属性。我写了下面的逻辑,它不起作用。

我们收到以下错误。

错误映射类型。

映射类型:订阅者DTO -> 订阅者 ConsoleAutomapperTestHarness.SubscriberDTO -> ConsoleAutomapperTestHarness.Subscriber

类型映射配置:订阅者DTO -> 订阅者 ConsoleAutomapperTestHarness.SubscriberDTO -> ConsoleAutomapperTestHarness.Subscriber

属性:订阅者设置

using AutoMapper; //5.1.1.0
using System;

namespace ConsoleAutomapperTestHarness
{
   public class Program
    {
        public static void Main(string[] args)
        {
            SubscriberDTO subDTO = new SubscriberDTO();
            subDTO.AllowAddPFA = true;
            subDTO.AllowAutoPay = true; ;
            subDTO.SubscriberID = 10000;
            subDTO.FirstName = "Kishor";

            new SubscriberAutoMapper();

            Subscriber sub = Mapper.Map<SubscriberDTO, Subscriber>(subDTO);
            Console.WriteLine(sub.SubscriberSettings.AllowAddPFA.ToString());
            Console.ReadLine();
        }
    }

    public class SubscriberAutoMapper
    {
        public SubscriberAutoMapper()
        {
            Mapper.Initialize(cfg => {
                cfg.CreateMap<SubscriberDTO, Subscriber>()
                .ForMember(dest => dest.SubscriberSettings, opt => opt.ResolveUsing<SubscriberAutoMapperResolver>());                
            });
            Mapper.AssertConfigurationIsValid();
        }
    }
    public class SubscriberAutoMapperResolver : IValueResolver<SubscriberDTO, Subscriber, Settings>
    {
        public Settings Resolve(SubscriberDTO source, Subscriber destination, Settings destMember, ResolutionContext context)
        {
            //line which is working.
        return new Settings() { AllowAddPFA = source.AllowAddPFA };

        //line which is not working
       // var result = context.Mapper.Map<SubscriberDTO, Settings>(source);
       // var result = Mapper.Map<SubscriberDTO, Settings>(source);
        //var result = Mapper.Map<SubscriberDTO, Settings>(source,destMember);
        //var result = context.Mapper.Map<SubscriberDTO, Settings>(source, destMember, context);
        //return result;           

        }
    }
    public class Subscriber
    {
        public int SubscriberID { get; set; }
        public Settings SubscriberSettings { get; set; }
        public string FirstName { get; set; }
    }
    public class Settings
    {
        public bool AllowEnrollment { get; set; }
        public bool AllowAutoPay { get; set; }
        public bool AllowAddPFA { get; set; }

    }

    public class SubscriberDTO
    {
        public int SubscriberID { get; set; }
        public string FirstName { get; set; }

        public bool AllowEnrollment { get; set; }
        public bool AllowAutoPay { get; set; }
        public bool AllowAddPFA { get; set; }
    }


}

【问题讨论】:

  • 您有问题吗?错误消息似乎可以解释出了什么问题。
  • 我需要你的帮助来解决这个问题。我已经在代码中提到了我尝试过的东西,但似乎都没有工作。

标签: c# automapper automapper-5


【解决方案1】:

老实说,ValueResolver 似乎有点矫枉过正,您可以完全放弃它并用最少的时间获得所需的结果(假设默认的 AutoMapper 行为使得在它们具有相同名称时显式指定属性是多余的,就像在您的大多数基本上是模型):

Mapper.Initialize(cfg => {
    cfg.CreateMap<SubscriberDTO, Subscriber>()
        .ForMember(d => d.SubscriberSettings, o => o.MapFrom(s => s));
    cfg.CreateMap<SubscriberDTO, Settings>();   
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2022-01-12
    • 1970-01-01
    相关资源
    最近更新 更多