使用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; }
}

CreateCompanyViewModelCreateUserTypeViewModel就像

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不同, CompanyDTOUserTypeDTO不是嵌套的对象(部分)UserDTO。

当我使用AutoMapper进行映射时, UserDTO属性被映射到UserDTO但是如预期的那样, CompanyDTOUserTypeDTO是空的。

我试图用它们映射ForMember功能与MapFromResolveUsing方法,但他们都显示错误的

成员的自定义配置仅适用于某个类型的顶级单个成员。

更新下面是我的映射代码

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