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?
With both flattening and nested mappings, we can create a variety of destination shapes to suit whatever our needs may be.
Automapper is considerably faster when mapping a List<T> of objects on . NET Core (It's still slower on full . NET Framework).
AutoMapper is one of the popular object-object mapping libraries with over 296 million NuGet package downloads. It was first published in 2011 and its usage is growing ever since. Mapster is an emerging alternative to AutoMapper which was first published in 2015 and has over 7.4 million NuGet package downloads.
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:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With