比 AutoMapper 更快?C#.NET Mapster 深度解析

简介

  • Mapster 是一个轻量、高性能的对象映射库,支持静态 & 动态映射、编译时代码生成、LINQ 投影等多种模式。

  • AutoMapperExpressMapper 等对比:

    • 性能更优:Mapster 在运行时基于表达式树生成委托,亦可使用 Source Generator 生成静态代码,启动一次性解析映射,后续调用近乎原生赋值速度;

    • 零侵入 & 零配置:默认按名称映射,亦支持通过 TypeAdapterConfig 全局或局部配置,无需继承或打标;

    • 灵活多样:支持深度映射、扁平化、条件映射、After/Before 钩子、接口映射、枚举映射、集合映射、LINQ 投影等。

  • 核心特性亮点

    • 零配置映射:支持自动映射同名属性

    • 编译时映射:生成高效 IL 代码

    • 丰富扩展:内置集合映射、深度克隆等

    • 轻量无依赖:仅 200KB 的轻量级库

    • 高度可扩展:支持自定义转换规则

安装与配置

安装 NuGet 包
Install-Package Mapster
Install-Package Mapster.DependencyInjection   # 若使用 DI 集成
Install-Package Mapster.Tool                 # 若需要源代码生成
在 ASP.NET Core 中注册
// Program.cs
builder.Services.AddMapster(config =>
{
   
   
    // 注册全局配置
    config.ForType<User, UserDto>()
          .Map(dest => dest.FullName, src => $"{
     
     src.FirstName} {
     
     src.LastName}");
});
builder.Services.AddScoped<IMapper, ServiceMapper>();
// 1. 创建映射配置类
public class MappingConfig : IRegister
{
   
   
    public void Register(TypeAdapterConfig config)
    {
   
   
        config.NewConfig<UserDto, UserViewModel>()
            .Map(dest => dest.Name, src => src.FullName);
            
        // 其他映射配置
    }
}

// 2. 在 Startup.cs 中注册
public void ConfigureServices(IServiceCollection services)
{
   
   
    // 注册 Mapster
    services.AddMapster(config =>
    {
   
   
        // 扫描程序集中的所有 IRegister 实现
        config.Scan(typeof(Startup).Assembly);
    });
    
    services.AddControllers();
}

// 3. 在控制器中使用
public class UserController : ControllerBase
{
   
   
    private readonly IMapper _mapper;
    
    public UserController(IMapper mapper)
    {
   
   
        _mapper = mapper;
    }
    
    [HttpGet]
    public IActionResult GetUser(int id)
    {
   
   
        var userDto = _userService.GetUser(id);  // 获取 DTO
        var viewModel = _mapper.Map<UserViewModel>(userDto);  // 映射到 ViewModel
        return Ok(viewModel);
    }
}
源生成器配置
[Mapper]
public interface IMapper
{
   
   
    UserDto Map(User user);
}

[AdaptTo("[name]Dto"), GenerateMapper]
public class User
{
   
   
    public int Id {
   
    get; set; }
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值