Automapper и коллекции
Допустим, у меня есть 2 объекта, которые внутри себя имеют еще и поля в виде коллекций.
С полями все понятно и нужно тупо вызывать:
ForMember(dst => dst.Comment, src => src.MapFrom(c => c.Comment))
А как быть с коллекциями, если имена полей в них не совпадают между источником и приемником?
Ответы (1 шт):
Автор решения: Exploding Kitten
→ Ссылка
Определить маппин для типов которые испольются в колекциях отдельно, тогда Automapper сможет использовать этот маппинг автоматически, например (Nested Mapping, List and Arrays):
class User
{
public List<Comment> Comments { get; set; }
}
class Comment
{
public int Id { get; set; }
public string Name { get; set; }
}
class UserDto
{
public List<CommentDto> Data { get; set; }
}
class CommentDto
{
public int Prop1 { get; set; }
public string Prop2 { get; set; }
}
var configuration = new MapperConfiguration(cfg =>
{
// сначала мапим типы и коллекций
cfg.CreateMap<CommentDto, Comment>()
.ForMember(dst => dst.Id, src => src.MapFrom(c => c.Prop1))
.ForMember(dst => dst.Name, src => src.MapFrom(c => c.Prop2));
// тут автомапер уже автоматически будет использовать существующий маппинг
cfg.CreateMap<UserDto, User>()
.ForMember(dst => dst.Comments, src => src.MapFrom(c => c.Data));
});