您应该能够只用一个映射1做到这一点:
您需要将 a 映射KeyValuePair<User, bool>
到UserDto
. 这对于 AutoMapper 能够将字典的内容映射到List<T>
我们最终创建的内容是必要的(更多的解释可以在这个答案中找到)。
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));
.Map
然后,在您的通话中使用映射:
Mapper.Map<Dictionary<User, bool>, List<UserDto>>(...);
您不需要自己映射集合,因为 AutoMapper 可以处理将 映射Dictionary
到 aList
只要您已将集合的内容相互映射(在我们的例子中,映射KeyValuePair<User, bool>
到UserDto
)。
编辑:这是另一个不需要将每个User
属性映射到的解决方案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));
1使用 AutoMapper 2.0