我的模特:
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使用派生类型的空间映射。
有什么想法吗?