У меня есть следующий простой код
public class User
{
public List<UserGroup> UserGroups { get; set; }
public string Name { get; set; }
}
public class UserGroup
{
public User User { get; set; }
public Group Group { get; set; }
}
public class Group
{
public List<UserGroup> UserGroups { get; set; }
public string Name { get; set; }
}
public class UserDto
{
public List<UserGroupDto> UserGroups { get; set; }
public string Name { get; set; }
}
public class UserGroupDto
{
public UserDto User { get; set; }
public GroupDto Group { get; set; }
}
public class GroupDto
{
public List<UserGroupDto> UserGroups { get; set; }
public string Name { get; set; }
}
private static void TestAutoMapper()
{
var mapperCfg = new AutoMapper.MapperConfiguration(cfg =>
{
cfg.CreateMap<User, UserDto>().MaxDepth(1);
cfg.CreateMap<UserGroup, UserGroupDto>().MaxDepth(1);
cfg.CreateMap<Group, GroupDto>().MaxDepth(1);
});
var mapper = mapperCfg.CreateMapper();
var user = new User { Name = "User1" };
var group = new Group { Name = "Group1" };
var userGroups = new List<UserGroup> { new UserGroup { User = user, Group = group } };
user.UserGroups = userGroups;
group.UserGroups = userGroups;
var users = new List<User> { user };
var usersDto = mapper.Map<IEnumerable<User>, IEnumerable<UserDto>>(users);
}
Но я не могу предотвратить бесконечную рекурсию, потому что она сохраняет ссылку на объекты.
Как я могу ограничить только первый «уже сопоставленный» экземпляр?
пример:
UserDto -> List -> UserGrop -> List (null)
UserDto -> Список -> UserDto (null)
Заранее спасибо.