项目中对象与对象赋值转换或者集合与集合的赋值转换使用的频率非常的高,比如数据库表实体对象(Entity)与业务类对象(Model)之间的赋值传递,或者模型对象(Model)与视图对象(ViewModel)之间的赋值传递。如果我们一个一个字段的赋值,将是非常繁琐并且毫无价值的重复工作,此时虽然我们可以自己通过反射提取个公共的方法来处理,但是更高效的方式是查看是否有第三方已经提供了比较成熟稳定的工具包,避免重复造轮子的工作。
本问主要介绍AutoMapper工具包,通过该工具包,我们可以快速的解决对象域对象之间的映射转换。官方的介绍如下:
What is AutoMapper?
AutoMapper is a simple little library built to solve a deceptively complex problem - getting rid of code that mapped one object to another. This type of code is rather dreary and boring to write, so why not invent a tool to do it for us?
AutoMapper是一个简单的类库,用来解决一个对象映射到另一个对象枯燥繁琐的代码,这种看似复杂的问题。这种类型的代码代码编写起来非常繁琐并且乏味。
AutoMapper的Github地址:https://github.com/AutoMapper/AutoMapper,官方地址:https://automapper.org/,官方使用文档(不同版本都有文档,可以切换版本号):https://docs.automapper.org/en/v7.0.1/。
NET Framework项目引入AutoMapper包
首先在项目中通过Nuget引入AutoMapper的相关包AutoMapper,在VS中的程序包管理控制台依次输入Install-Package AutoMapper -Version 7.0.1命令完成包的安装。如果官方包有更新可以更改版本号,安装最新版本的包。按照好之后,在项目的引用中可以看到AutoMapper已经被添加进项目。
如何配置
首先需要将源类(Source)以及目标类(Destination)通过MapperConfiguration的CreateMap方法进行配置,相当于通知AutoMapper这两个类型可以进行转换。然后将MapperConfiguration进行实例化调用或者使用静态Mapper方法。官方推荐我们使用静态方法,所以我们使用官方推荐的方法,在项目的Global.asax或者Startup中配置一次,然后通过静态方法调用。
配置源类(Source)和目标类(Destination),代码如下:
/// <summary>
/// AutoMapper配置类
/// </summary>
public class MapperConfiguration : Profile
{
#region 构造方法
public MapperConfiguration()
{
//创建指定的Maps
CreateUserMaps();
CreateProductMaps();
}
#endregion
#region 公共方法
/// <summary>
/// 创建用户映射
/// </summary>
protected virtual void CreateUserMaps()
{
CreateMap<User, UserModel>();
CreateMap<UserModel, User>();
}
/// <summary>
/// 创建产品映射
/// </summary>
protected virtual void CreateProductMaps()
{
CreateMap<Product, ProductModel>();
CreateMap<ProductModel, Product>();
}
#endregion
}
将项目中所有需要映射转换的类都在上面的类中进行统一配置,然后在Global.asax文件中初始化配置AutoMapper,代码如下:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
//其他初始化代码...
//初始化配置AutoMapper
AutoMapper.Mapper.Initialize((cfg) => {
cfg.AddProfile<MapperConfiguration>();
});
}
配置好之后,项目中我们可以直接通过AutoMapper的静态方法进行对象之间的映射转换。
如何使用
项目中直接通过Mapper.Map静态方法转换对象,代码如下:
public JsonResult Edit(int id)
{
try
{
var user = _userService.GetById(id);
//使用AutoMapper的静态方法直接映射转换Entity转换为Model
var userModel = AutoMapper.Mapper.Map<UserModel>(user);
return Json(new { success = true, data = userModel });
}
catch (Exception ex)
{
return Json(new { success = false, error = ex.Message });
}
}
以上就是AutoMapper在.NET Framework项目中的简单使用,如果转换的对象类型熟悉很多不一致,我们可以在配置类型转换的时候自定义(参考:https://docs.automapper.org/en/v7.0.1/Custom-type-converters.html)。一些高级使用也可以根据官方的使用文档做配置(https://docs.automapper.org/en/latest/),AutoMapper极大的简化了对象之间的映射转换,项目中极力推荐使用。希望本文可以帮助到其他网友,如果有描述不准确的地方,也欢迎各位网友反馈指正。