I am having a hard time to understand how to map certain objects. Please answer some questions about this simple example.
Example code
class User
{
private int id;
private string name;
}
class Group
{
private int id;
private string name;
private List<User> users;
}
[DataContract]
public class UserDto
{
[DataMember]
public int id { get; set; }
[DataMember]
public string name{ get; set; }
}
[DataContract]
public class GroupDto
{
[DataMember]
public int id { get; set; }
[DataMember]
public string name{ get; set; }
[DataMember]
public List<User> Users { get; set; }
}
The mappers
Mapper.CreateMap<User, UserDto>();
Mapper.CreateMap<UserDto, User>();
Mapper.CreateMap<Group, GroupDto>();
Mapper.CreateMap<GroupDto, Group>();
When mapping Group
to GroupDto
, do you have to map User
to UserDto
internally because the List<User>
in Group
consist of unmapped Users
? If so how do you do this? My guess is
Mapper.CreateMap<Group, GroupDto>()
.ForMember(g => g.id, opt => opt.Ignore());
.ForMember(g => g.name, opt => opt.Ignore());
.ForMember(g => g.Users, opt => opt.MapFrom(u => Mapper.Map<Group, UserDto>(u)))
Is this correct?
As @stuartd said, if you change :
for :
you just need :
Otherwise, change
for something like :
This has not been tested, but the idea is here....
1- Change the GroupDto to be like this:
2- Create your mappings :
3- that's all, because auto mapper will automatically map the
List<User>
toList<UserDto>
(since they have same name, and there is already a mapping from user to UserDto)4- When you want to map you call :
Hope that helps.