Home > Back-end >  Automapper mapping child properties
Automapper mapping child properties

Time:08-11

I have a view model that looked like this:

class PersonSectionViewModel
{
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

class PersonViewModel
{
   public PersonSectionViewModel Main { get; set; }
   public PersonSectionViewModel Partner { get; set; }
}

And I tried mapping the properties like this, but it's not working at all:

class PersonDTO 
{
  public string FirstName { get; set; }
  public string LastName { get; set; }
  public string FirstName_2 { get; set; }
  public string LastName_2 { get; set; }
}

CreateMap<PersonDTO, PersonViewModel>()
.ForMember(dest => dest.Main.FirstName,
           opt => opt.MapFrom(src => src.FirstName))
.ForMember(dest => dest.Main.LastName,
           opt => opt.MapFrom(src => src.LastName))
.ForMember(dest => dest.Partner.FirstName,
           opt => opt.MapFrom(src => src.FirstName_2))
.ForMember(dest => dest.Partner.LastName,
           opt => opt.MapFrom(src => src.LastName_2))

What's the right way of mapping this?

Thank you.

CodePudding user response:

Working with .ForPath().

CreateMap<PersonDTO, PersonViewModel>()
    .ForPath(dest => dest.Main.FirstName,
                opt => opt.MapFrom(src => src.FirstName))
    .ForPath(dest => dest.Main.LastName,
                opt => opt.MapFrom(src => src.LastName))
    .ForPath(dest => dest.Partner.FirstName,
                opt => opt.MapFrom(src => src.FirstName_2))
    .ForPath(dest => dest.Partner.LastName,
                opt => opt.MapFrom(src => src.LastName_2));

Demo @ .NET Fiddle


Reference

Use of .ForPath() | GitHub

  • Related