Automapper 是一个用于对象间属性映射的库,它能够简化将一种类型的对象转换为另一种类型的对象的过程。在处理嵌套集合时,Automapper 可以自动映射集合中的每个元素及其嵌套属性。
应用场景包括但不限于:
假设我们有两个类,Source
和 Destination
,其中包含嵌套的集合属性。
public class SourceItem
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Source
{
public List<SourceItem> Items { get; set; }
}
public class DestinationItem
{
public int Identifier { get; set; }
public string DisplayName { get; set; }
}
public class Destination
{
public List<DestinationItem> Elements { get; set; }
}
使用 Automapper 进行映射配置:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<SourceItem, DestinationItem>()
.ForMember(dest => dest.Identifier, opt => opt.MapFrom(src => src.Id))
.ForMember(dest => dest.DisplayName, opt => opt.MapFrom(src => src.Name));
cfg.CreateMap<Source, Destination>()
.ForMember(dest => dest.Elements, opt => opt.MapFrom(src => src.Items));
});
var mapper = config.CreateMapper();
var source = new Source
{
Items = new List<SourceItem>
{
new SourceItem { Id = 1, Name = "Item1" },
new SourceItem { Id = 2, Name = "Item2" }
}
};
var destination = mapper.Map<Destination>(source);
问题:映射后的集合为空或元素未正确映射。
原因:
解决方法:
.ForMember
明确指定集合属性的映射规则。cfg.CreateMap<Source, Destination>()
.ForMember(dest => dest.Elements, opt => opt.MapFrom(src => src.Items ?? new List<SourceItem>()));
通过以上步骤,可以确保嵌套集合在 Automapper 中正确映射。
领取专属 10元无门槛券
手把手带您无忧上云