Search code examples
c#.netc#-4.0automapperautomapper-2

Automapper with nested child list


I have two classes below:

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; }
}

The mapping must be like this:

Id -> Id
Name -> Text
ImageName -> ImagePath 
Pages -> PageUIs

How can I do this using Automapper?


Solution

  • You can use ForMember and MapFrom (documentation).
    Your Mapper configuration could be:

    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>();
    

    Usage:

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

    Result:

    enter image description here