假设我们有一个扁平的数据模型,例如:
public class FlatFoo
{
public int Id { get; set; }
public string Name { get; set; }
public string Bar_Name { get; set; }
public int Bar_Number { get; set; }
}
我们希望将它映射到一个包含嵌套对象的复杂模型:
public class ComplexFoo
{
public int Id { get; set; }
public string Name { get; set; }
public Bar Bar { get; set; }
}
public class Bar
{
public string Name { get; set; }
public int Number { get; set; }
}
使用AutoMapper,我们可以使用ReverseMap()来自动将扁平对象映射到复杂对象:
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap()
.ForMember(dest => dest.Bar, opt => opt.MapFrom(src => new Bar
{
Name = src.Bar_Name,
Number = src.Bar_Number,
}));
cfg.CreateMap().ReverseMap();
});
var mapper = config.CreateMapper();
var flatFoo = new FlatFoo
{
Id = 1,
Name = "FlatFoo",
Bar_Name = "BarName",
Bar_Number = 42,
};
var complexFoo = mapper.Map(flatFoo);
在上面的代码中,我们将FlatFoo映射到ComplexFoo,同时使用CreateMap()定义了一个反向映射。使用ReverseMap(),我们可以在源类和目标类之间创建一个双向映射,使得我们可以轻松地在它们之间进行相互转换。我们运用ForMember()配置了嵌套对象Bar的映射关系。
可以看到,我们通过AutoMapper成功地将扁平的FlatFoo对象映射到了复杂的ComplexFoo对象中,而