这是我的来源:
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; }
}
如何进行映射?当他们说扁平化是自动的时,普通的创建地图不起作用。
答案 0 :(得分:15)
如果您将目标类属性名称更改为AddressStreet
和AddressState
,则按惯例,AutoMapper会将它们与源上的Address.Street
和Address.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));
有关详细信息,请参阅Projection和Flattening的AutoMapper文档。