
在日常开发中,我们经常需要在不同的对象之间进行数据转换。例如,将数据库查询结果(DTO)转换为业务对象(BO),或将业务对象转换为视图模型(ViewModel)。如果手动编写这些转换逻辑,代码会变得冗长且容易出错。这时,AutoMapper 就派上了用场!
AutoMapper 是一个开源的对象映射库,广泛应用于 .NET 开发中。它通过配置映射规则,能够自动将一个对象的属性值复制到另一个对象,从而大大简化了对象之间的转换过程。
无论是简单的属性映射,还是复杂的嵌套对象映射,AutoMapper 都能轻松应对。接下来,我们就来详细了解它的功能和使用方法。
首先,在项目中安装 AutoMapper 的 NuGet 包:
Install-Package AutoMapper如果你使用的是 ASP.NET Core 项目,还可以安装以下扩展包以集成 AutoMapper:
Install-Package AutoMapper.Extensions.Microsoft.DependencyInjection假设我们有两个对象:Source 和 Destination,它们的结构如下:
public classSource
{
publicint Id { get; set; }
publicstring Name { get; set; }
}
publicclassDestination
{
publicint Id { get; set; }
publicstring FullName { get; set; }
}注意:Source 中的 Name 属性需要映射到 Destination 的 FullName 属性。
在使用 AutoMapper 之前,我们需要先配置映射规则:
using AutoMapper;
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<Source, Destination>()
.ForMember(dest => dest.FullName, opt => opt.MapFrom(src => src.Name));
});
var mapper = config.CreateMapper();在这里,我们通过 CreateMap 方法定义了从 Source 到 Destination 的映射规则,并使用 ForMember 方法指定了属性之间的映射关系。
接下来,我们可以使用 mapper.Map 方法进行对象转换:
var source = new Source { Id = 1, Name = "张三" };
var destination = mapper.Map<Destination>(source);
Console.WriteLine($"Id: {destination.Id}, FullName: {destination.FullName}");
// 输出:Id: 1, FullName: 张三可以看到,Source 对象的属性值已经成功映射到了 Destination 对象。
除了基本的属性映射,AutoMapper 还提供了许多高级功能,满足更复杂的开发需求。
AutoMapper 支持对集合类型的对象进行映射。例如:
var sources = new List<Source>
{
new Source { Id = 1, Name = "张三" },
new Source { Id = 2, Name = "李四" }
};
var destinations = mapper.Map<List<Destination>>(sources);
foreach (var dest in destinations)
{
Console.WriteLine($"Id: {dest.Id}, FullName: {dest.FullName}");
}如果需要对某些属性进行特殊处理,可以使用 ConvertUsing 方法定义自定义逻辑。例如:
cfg.CreateMap<Source, Destination>()
.ForMember(dest => dest.FullName, opt => opt.ConvertUsing(src => src.Name.ToUpper()));这样,FullName 属性会被转换为大写形式。
AutoMapper 还支持对嵌套对象进行映射。例如:
public class NestedSource
{
public Source Child { get; set; }
}
public class NestedDestination
{
public Destination Child { get; set; }
}
cfg.CreateMap<NestedSource, NestedDestination>();在这种情况下,AutoMapper 会自动递归映射嵌套对象。
AutoMapper 是一个功能强大且易于使用的对象映射工具,能够显著提升开发效率并减少重复代码。无论你是初学者还是资深开发者,都可以从中受益。