get*_*tit 7 c# model-view-controller nested viewmodel automapper
编辑:标题不正确,我试图从源列表映射到嵌套模型的源列表.
我在尝试将列表映射到嵌套模型中列出的另一个列表时遇到问题.种类和不平整的种类.问题是我不知道如何做映射.
这是我的设置跟随我失败的映射尝试:
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; }
}
Run Code Online (Sandbox Code Playgroud)
其中Item和ItemModel已经在它们之间定义了映射
我不能这样做......
Mapper.CreateMap<SourceModel, DestinationModel>()
.ForMember(d => d.DestinationNestedViewModel.NestedList,
opt => opt.MapFrom(src => src.SourceList))
Run Code Online (Sandbox Code Playgroud)
错误:
表达式'd => d.DestinationNestedViewModel.NestedList'必须解析为顶级成员.参数名称:lambdaExpression
然后我尝试了这样的事情:
.ForMember(d => d.DestinationNestedViewModel,
o => o.MapFrom(t => new DestinationNestedViewModel { NestedList = t.SourceList }))
Run Code Online (Sandbox Code Playgroud)
那里的问题是 NestedList = t.SourceList.它们分别包含不同的元素,ItemModel和Item.所以,他们需要被映射.
我该如何映射?
And*_*ker 16
我想你想要这样的东西:
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));
Run Code Online (Sandbox Code Playgroud)
那么你所要做的就是Mapper.Map在Source和之间打电话Destination:
Mapper.Map<SourceModel, DestinationModel>(source);
Run Code Online (Sandbox Code Playgroud)