具有嵌套子列表的自动映射器

tob*_*ias 18 .net c# automapper c#-4.0 automapper-2

我下面有两个类,映射必须是这样的

public class Module
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string ImageName { get; set; }
    public virtual ICollection<Page> Pages { get; set; }
}

public class ModuleUI
{
    public int Id { get; set; }
    public string Text { get; set; }
    public string ImagePath { get; set; }
    public List<PageUI> PageUIs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何使用Automapper执行此操作?

Id -> Id
Name -> Text
ImageName -> ImagePath 
Pages -> PageUIs
Run Code Online (Sandbox Code Playgroud)

nem*_*esv 41

你可以使用ForMemberMapFrom(文档).
您的Mapper配置可能是:

Mapper.CreateMap<Module, ModuleUI>()
    .ForMember(s => s.Text, c => c.MapFrom(m => m.Name))
    .ForMember(s => s.ImagePath, c => c.MapFrom(m => m.ImageName))
    .ForMember(s => s.PageUIs, c => c.MapFrom(m => m.Pages));
Mapper.CreateMap<Page, PageUI>();
Run Code Online (Sandbox Code Playgroud)

用法:

var dest = Mapper.Map<ModuleUI>(
    new Module
    {
        Name = "sds",
        Id = 2,
        ImageName = "sds",
        Pages = new List<Page>
        {
            new Page(), 
            new Page()
        }
    });
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述