usted debería ser capaz de hacer esto con sólo un mapeo :
tendrá que asignar un KeyValuePair<User, bool>
a UserDto
. Esto es necesario para que AutoMapper pueda asignar los contenidos del diccionario a los contenidos del List<T>
que finalmente estamos creando (se puede encontrar más de una explicación en this answer).
Mapper.CreateMap<KeyValuePair<User, bool>, UserDto>()
.ForMember(dest => dest.Username, opt => opt.MapFrom(src => src.Key.UserName))
.ForMember(dest => dest.Avatar, opt => opt.MapFrom(src => src.Key.Avatar))
.ForMember(dest => dest.IsFriend, opt => opt.MapFrom(src => src.Value));
A continuación, utilice la asignación en su llamada .Map
:
Mapper.Map<Dictionary<User, bool>, List<UserDto>>(...);
No es necesario mapear las colecciones a sí mismos, como AutoMapper puede manejar el mapeo de la Dictionary
a un List
, siempre y cuando' ve asignado el contenido de las colecciones entre sí (en nuestro caso, KeyValuePair<User, bool>
a UserDto
).
Editar: Aquí hay otra solución que no requiere la cartografía de cada User
propiedad a UserDto
:
Mapper.CreateMap<User, UserDto>();
Mapper.CreateMap<KeyValuePair<User, bool>, UserDto>()
.ConstructUsing(src => Mapper.Map<User, UserDto>(src.Key))
.ForMember(dest => dest.IsFriend, opt => opt.MapFrom(src => src.Value));
Usando AutoMapper 2.0
Si alguien me puede dar un método que realmente utiliza automapper, voy a cambiar la respuesta a la pregunta! – reach4thelasers