自动映射:从非多态列表映射到多态列表

时间:2016-04-09 14:24:32

标签: c# .net automapper

我的模特:

class SourceViewModel
{
    bool IsCpmplex {get;set;}
    String SimpleProp {get;set;}
    String ComplexProp {get;set;}
}
class TargetSimpleModel
{
    String SimpleProp {get;set;}
}
class TargetComplexModel : TargetSimpleModel
{
    String ComplexProp {get;set;}
}

我想将List<SourceViewModel>映射到List<TargetSimpleModel>,并在目标列表中继承。继承基于源Peoperty IsCopmplex(它应该用作鉴别器)。

结果示例。

如果源列表是这样的:

{
    SourceViewModel{IsComplex=true,...},
    SourceViewModel{IsComplex=false,...}
}

目的地列表应为:

{
    TargetComplexModel, // with all props mapped 
    TargetSimpleModel
}

我当前的confg(无法正常工作):

Mapper.CreateMap<SourceViewModel, TargetSimpleModel>()
    .ConstructUsing(model => model.IsComplex ? new TargetComplexModel() : new TargetSimpleModel())
    .Include<SourceViewModel, TargetComplexModel>()
Mapper.CreateMap<SourceViewModel, TargetComplexModel>();

它可以工作,但不会映射TargetComplexModel的属性(如ComplexProp)。 当ConstructUsing返回时,我需要一种方法使automapper使用派生类型的空间映射。

有什么想法吗?

0 个答案:

没有答案