C# AutoMapper 10个常用方法总结

Coding-112

前言

AutoMapper 是一个强大的对象映射库,用于简化和自动化复杂对象之间的转换。

本文总结了 AutoMapper 10 个常用的方法和功能,作为前文《C# 对象映射方法总结(2):AutoMapper 高效实现对象映射详细步骤分享》的补充!

1. 创建映射

在使用 AutoMapper 之前,需要创建映射配置,通常在 Profile 类中进行:

using AutoMapper;

public class MappingProfile : Profile
{
    public MappingProfile()
    {
        CreateMap<SourceModel, DestinationModel>();
    }
}

2. 初始化 AutoMapper

在应用程序启动时,通常会在 Startup.csConfigureServices 方法中(.NET Framework)或 Program.cs(.NET Core)里配置 AutoMapper:


services.AddAutoMapper(typeof(MappingProfile)); 

// 详细代码过程可参考前文
// 也可以利用反射自动扫描当前程序集中的所有继承 Profile 的配置程序

3. 映射对象

使用以下方法进行对象映射:

  • Mapper.Map<TDestination>(source)

    将源对象映射到目标类型。

    var destination = Mapper.Map<DestinationModel>(source);
    
  • Mapper.Map(source, destination)

    将源对象的值映射到已存在的目标对象。

    Mapper.Map(source, destination);
    

4. 使用依赖注入的 IMapper

如果使用依赖注入,可以直接在构造函数中注入 IMapper,如下代码:

public class PersonService
{
    private readonly IMapper _mapper;

    public PersonService(IMapper mapper)
    {
        _mapper = mapper;
    }

    public DestinationModel Convert(SourceModel source)
    {
        return _mapper.Map<DestinationModel>(source);
    }
}

5. 配置映射选项

自定义映射的行为可以通过各种选项进行配置。

例如,忽略某些属性、使用自定义转换等:

  • 忽略属性

    CreateMap<SourceModel, DestinationModel>()
        .ForMember(dest => dest.SomeProperty, opt => opt.Ignore());
    
  • 使用自定义转换

    CreateMap<SourceModel, DestinationModel>()
        .ForMember(dest => dest.SomeProperty, opt => opt.MapFrom(src => CustomConversion(src)));
    

6. 集合映射

AutoMapper 支持直接映射集合:

var sourceList = new List<SourceModel> { /* ... */ };
var destinationList = _mapper.Map<List<DestinationModel>>(sourceList);

7. 条件映射

支持根据特定条件进行映射:

CreateMap<SourceModel, DestinationModel>()
    .ForMember(dest => dest.SomeProperty, 
        opt => opt.Condition(src => src.SomeCondition == true));

8. 映射嵌套对象

AutoMapper 还支持嵌套对象的映射:

CreateMap<ParentSourceModel, ParentDestinationModel>();
CreateMap<ChildSourceModel, ChildDestinationModel>();

只需创建好子映射,AutoMapper 会自动处理嵌套关系。

9. 自定义解析器

可以定义自定义解析器以处理更复杂的映射逻辑:

// 自定义解析器
public class CustomValueResolver : IValueResolver<SourceModel, DestinationModel, string>
{
    public string Resolve(SourceModel source, DestinationModel destination, string destMember, ResolutionContext context)
    {
        // 返回处理后的值
        return source.SomeProperty + " - custom";
    }
}

// 在映射中使用自定义解析器
CreateMap<SourceModel, DestinationModel>()
    .ForMember(dest => dest.SomeProperty, opt => opt.MapFrom<CustomValueResolver>());

10. 逆向映射

可以启用逆向映射以允许从目标类型到源类型的映射,这在需要从 DTO 转换回实体时非常有用:

CreateMap<SourceModel, DestinationModel>()
    .ReverseMap();

总结

以上是 AutoMapper 的一些常用方法和功能。

在实际使用中,可以根据具体需求创建和配置映射,以确保对象之间的转换能满足业务的要求。

好了,本文的分享就到这里啦,如果觉得有用,别忘了点个【赞与在看】哦,你的支持是我最大的动力!

最后,如果你有更好的想法或建议,欢迎留言讨论!

往期精彩

  1. 把 C# 里的 HttpClient 封装起来,告别复杂的配置,让 Restful API 调用更轻松更高效
  2. C#12 中 5 个节省你开发时间的的改进
  3. C# 静态类,高手不想让你知道的 15 个真相
  4. 封装一个 C# 范围判断函数,从此告别重复编写范围判断代码的烦恼
  5. 用 C# Stopwatch 计时,让代码性能飞起来!
  6. 轻装上阵,Visual Studio LocalDB:.NET 程序员的本地数据库神器
  7. 封装一个C#万能基础数据类型转换器,一招解决所有基础类型转换烦恼
  8. 闲话 .NET(7):.NET Core 能淘汰 .NET FrameWork 吗?
  9. 常用的 4 种 ORM 框架(EF Core,SqlSugar,FreeSql,Dapper)对比总结
  10. C# AutoMapper 10个常用方法总结
  11. C# 7个方法比较两个对象是否相等
  12. C# 去掉字符串最后一个字符的 4 种方法

我是老杨,一个执着于编程乐趣、至今奋斗在一线的 10年+ 资深研发老鸟,是软件项目管理师,也是快乐的程序猿,持续免费分享全栈实用编程技巧、项目管理经验和职场成长心得!欢迎点击下方卡片关注老杨的公众号,更多干货等你来!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值