自动映射器:如何使用源类型的属性映射许多成员?


// source classes
public class User 
{
public string Id { get; set; }
public string Name { get; set; }
}
public class UserStatus 
{
public User User { get; set; }
public int Status { get; set; }
}
// dest classes
public class UserVM 
{
public string Id { get; set; }
public string Name { get; set; }
}
public class UserStatusVM : UserVM 
{
public int Status { get; set; }
}
//Automapper configuration
c.CreateMap<User, UserVM>();
c.CreateMap<UserStatus, UserStatusVM>()
.ForMember(dest => dest.Status, opt => opt.MapFrom(source => source.Status))
.ForAllOtherMembers(opt => opt.ResolveUsing(source => Mapper.Map<User, UserVM>(source.User))); // error there

我的目标是UserStatusVM的所有成员(不包括Status一个)都是从UserStatusUser属性映射的,就好像它正在映射Users -> UserVM一样。

我怎样才能实现它?像ForMember(dest => dest.Id, opt => opt.MapFrom(source => source.User.Id))这样的东西是唯一的解决方案吗?

重命名UserVM的属性

public class UserVM 
{
public string UserId { get; set; }
public string UserName { get; set; }
}

UserIdUserName将分别按照惯例从UserStatus.User.IdUserStatus.User.Name进行映射。

注意

映射时,Automapper 发现UserVM.UserId不会在UserStatus类型上退出,因此它会UserId拆分为UserId(通过 CamelCase),并从UserStatus.User.Id映射UserVM.UserId

最新更新