自动映射器不适用于转换为派生类

时间:2019-06-06 09:43:18

标签: c# type-conversion automapper

我使用Automapper 8.1.0进行转换时涉及3个主要类。

public class MessageW{
   public int NumAverages { get; set; }
   public int RXWaveguide { get; set; }
}

public class ProcessingS{
   public ProcessingS(double startTime, double timeStep) {
        StartTime = startTime;
        TimeStep = timeStep;            
    }
   public double StartTime { get; }
   public double TimeStep { get; }
}

public class ProcessingW : ProcessingS {
   public int NumAverages { get; }
   public int RXWaveguide { get; }
   public ProcessingW(double startTime, double timeStep, int 
        numAverages, int rxWaveguide) : base( startTime, timeStep) {
        NumAverages = numAverages;
        RXWaveguide = rxWaveguide;
    }
}

我正在使用MessageWProcessingW类转换为Automapper类。 请注意,ProcessingW类是从ProcessingS继承的。

这是我的Automapper配置。

var msgWfm = new MessageW() {
                 NumAverages = 5,
                 RXWaveguide = 5
             };

 var mapperConfig = new MapperConfiguration(
                 cfg => {
                     cfg.CreateMap<MessageW, ProcessingW>()
                        .ForMember(proWfmDest => proWfmDest.StartTime, opt => opt.Ignore())
                        .ForMember(proWfmDest => proWfmDest.TimeStep, opt => opt.Ignore());
                 });

            var myMapper = mapperConfig.CreateMapper();
             mapperConfig.AssertConfigurationIsValid();

当我运行自动映射器转换时,mapperConfig.AssertConfigurationIsValid();抛出了一条错误消息:

  

找到未映射的成员。在下面查看类型和成员。添加一个   自定义映射表达式,忽略,添加自定义解析器或修改   源/目标类型对于没有匹配的构造函数,请添加一个无参数   ctor,添加可选参数或映射所有构造函数参数   ================================================== ======================== MessageW-> ProcessingW(目标成员列表)   MessageW->   ProcessingW(目标成员列表)

     

没有可用的构造函数。

当我尝试

  • ProcessingW类或
  • 中删除继承
  • StartTime类中添加TimeStepMessageW属性

然后,Automapper转换有效,但是上述那些功能无法满足我的要求。

如何根据当前的班级设计和Automapper设置使Automapper正常工作?我错过了什么吗?

感谢您的时间和耐心阅读我的问题,如果需要,我很乐意添加详细信息。

0 个答案:

没有答案