从嵌套类到单个(展平)的自动映射映射

时间:2011-11-09 00:03:46

标签: asp.net-mvc automapper

这是我的来源:

public class User
{
    public int UserId { get; set; }

    public Address Address { get; set; }
}

public class Address
{
    public string Address { get; set; }
    public string State {get; set; }
}

这是我的目的地:

public class UserVM
{
    public int UserId { get; set; }

    public string Address { get; set; }
    public string State { get; set; }
}

如何进行映射?当他们说扁平化是自动的时,普通的创建地图不起作用。

1 个答案:

答案 0 :(得分:15)

如果您将目标类属性名称更改为AddressStreetAddressState,则按惯例,AutoMapper会将它们与源上的Address.StreetAddress.State相匹配。

public class UserVM
{
    public int UserId { get; set; }

    public string AddressStreet { get; set; } // User.Address.Street
    public string AddressState { get; set; }  // User.Address.State
}

或者,您保留目标属性名称并使用自定义成员映射:

Mapper.CreateMap<User, UserVM>()
    .ForMember(dest => dest.Street, opt => opt.MapFrom(src => src.Address.Street))
    .ForMember(dest => dest.State, opt => opt.MapFrom(src => src.Address.State));

有关详细信息,请参阅ProjectionFlattening的AutoMapper文档。