编辑:标题不正确,我试图从源列表映射到嵌套模型的源列表.
我在尝试将列表映射到嵌套模型中列出的另一个列表时遇到问题.种类和不平整的种类.问题是我不知道如何做映射.
这是我的设置跟随我失败的映射尝试:
public class DestinationModel { public DestinationNestedviewmodel sestinationNestedviewmodel { get; set; } } public class DestinationNestedviewmodel { public List<ItemModel> NestedList { get; set; } } public class SourceModel { public List<Item> SourceList { get; set; } }
其中Item和ItemModel已经在它们之间定义了映射
我不能这样做……
Mapper.CreateMap<SourceModel,DestinationModel>() .ForMember(d => d.DestinationNestedviewmodel.NestedList,opt => opt.MapFrom(src => src.SourceList))
错误:
表达式’d => d.DestinationNestedviewmodel.NestedList’必须解析为顶级成员.参数名称:lambdaExpression
然后我尝试了这样的事情:
.ForMember(d => d.DestinationNestedviewmodel,o => o.MapFrom(t => new DestinationNestedviewmodel { NestedList = t.SourceList }))
那里的问题是
NestedList = t.SourceList.
它们分别包含不同的元素,ItemModel和Item.所以,他们需要被映射.
我该如何映射?
解决方法
我想你想要这样的东西:
Mapper.CreateMap<Item,ItemModel>(); /* Create a mapping from Source to Destination,but map the nested property from the source itself */ Mapper.CreateMap<SourceModel,DestinationModel>() .ForMember(dest => dest.DestinationNestedviewmodel,opt => opt.MapFrom(src => src)); /* Then also create a mapping from Source to DestinationNestedviewmodel: */ Mapper.CreateMap<SourceModel,DestinationNestedviewmodel>() .ForMember(dest => dest.NestedList,opt => opt.MapFrom(src => src.SourceList));
那么你所要做的就是在Source和Destination之间调用Mapper.Map:
Mapper.Map<SourceModel,DestinationModel>(source);