使用AutoMapper将复杂对象展平为多个展平对象
我有一个视图模型,如
public class RootViewModel
{
public CreateCompanyViewModel Company { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
public string Password { get; set; }
public string ConfirmPassword { get; set; }
public CreateUserTypeViewModel UserType { get; set; }
}
而CreateCompanyViewModel
和CreateUserTypeViewModel
就像
public class CreateCompanyViewModel
{
public string CompanyName { get; set; }
}
public class CreateUserTypeViewModel
{
public string UserTypeName { get; set; }
}
我想将这个RootVM平铺到多个DTO上。 对于上面的RootVM,我有3个DTO
public class UserDTO
{
public string Name { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
public string Password { get; set; }
public string ConfirmPassword { get; set; }
}
public class CompanyDTO
{
public string CompanyName { get; set; }
}
public class UserTypeDTO
{
public string UserTypeName { get; set; }
}
注意:请注意,与UserDTO
不同, CompanyDTO
和UserTypeDTO
不是嵌套的对象(部分)UserDTO。
当我使用AutoMapper进行映射时, UserDTO
属性被映射到UserDTO
但是如预期的那样, CompanyDTO
和UserTypeDTO
是空的。
我试图用它们映射ForMember
功能与MapFrom
和ResolveUsing
方法,但他们都显示错误的
成员的自定义配置仅适用于某个类型的顶级单个成员。
更新下面是我的映射代码
CreateMap<RootViewModel, CompanyDTO>();
CreateMap<RootViewModel, UserDTO>();
CreateMap<RootViewModel, UserTypeDTO>();
CreateMap<CreateCompanyViewModel, CompanyDTO>();
CreateMap<CreateUserTypeViewModel, UserTypeDTO>();
我使用的是AutoMapper 5.2.0
更新 - 修复:嗯,我发现的是,我必须手动使用.ForMember所有的属性,否则自动约定工作,我需要使用https://github.com/AutoMapper/AutoMapper/wiki/Flattening或https://arnabroychowdhurypersonal.wordpress.com/2014/03/08/flattening-object-with-automapper/。
这是使其工作的唯一方法。
希望我能做.ForMember(d => d, s => s.MapFrom(x => x.Company))
,它会映射CreateCompanyViewModel => CompanyDTO
所有属性。 这本来是非常方便的,但AutoMapper不支持这一点。
尝试下面
CreateMap<CreateCompanyViewModel, CompanyDTO>();
CreateMap<CreateUserTypeViewModel, UserTypeDTO>();
CreateMap<RootViewModel, CompanyDTO>()
.ForMember(dest => dest.CompanyName, opt => opt.MapFrom(src => src.Company.CompanyName));
CreateMap < RootViewModel, UserTypeDTO()
.ForMember(dest => dest.UserTypeName, opt => opt.MapFrom(src => src.UserType.UserTypeName));
CreateMap<RootViewModel, UserDTO>();
链接地址: http://www.djcxy.com/p/37415.html
上一篇: Flatten Complex Object To Multiple Flatten Objects Using AutoMapper
下一篇: AutoMapper ignore member failing when mapping with Type objects