AutoMappe包及用法

AutoMapper 是一个 .NET 下常用的对象映射库,主要用于简化不同对象之间的数据转换。它可以自动将一个对象的属性值映射到另一个对象,常用于 DTO(数据传输对象)和实体对象之间的转换,减少手动赋值代码,提高开发效率。

主要特点:

  • 自动属性映射(支持同名属性自动匹配)
  • 支持复杂类型、集合、嵌套对象映射
  • 可自定义映射规则
  • 易于集成到 ASP.NET Core、依赖注入等场景

下面是一个属性数量和名称都不同,并且显式设置映射规则的 AutoMapper 示例:

csharp 复制代码
public class User
{
    public int UserId { get; set; }
    public string FullName { get; set; }
    public string EmailAddress { get; set; }
}

public class UserDto
{
    public int Id { get; set; }
    public string Name { get; set; }
}

映射配置及使用:

csharp 复制代码
using AutoMapper;

class Program
{
    static void Main()
    {
        // 显式设置映射规则
        var config = new MapperConfiguration(cfg =>
        {
            cfg.CreateMap<User, UserDto>()
                .ForMember(dest => dest.Id, opt => opt.MapFrom(src => src.UserId))
                .ForMember(dest => dest.Name, opt => opt.MapFrom(src => src.FullName));
            // EmailAddress 没有映射到 UserDto
        });

        var mapper = config.CreateMapper();

        var user = new User
        {
            UserId = 100,
            FullName = "李四",
            EmailAddress = "lisi@example.com"
        };

        var userDto = mapper.Map<UserDto>(user);

        Console.WriteLine($"Id: {userDto.Id}, Name: {userDto.Name}");
    }
}

说明:

  • User 有三个属性,UserDto 只有两个,且属性名不同。
  • 显式用 .ForMember 指定了属性映射关系。
  • 未映射的属性(如 EmailAddress)不会出现在目标对象中。

这样可以灵活应对属性不一致的场景。

相关推荐
IT_陈寒2 分钟前
SpringBoot 3.2 实战:用这5个新特性让你的API性能提升40%
前端·人工智能·后端
五仁火烧10 分钟前
安装rust开发环境
开发语言·后端·rust
IT枫斗者15 分钟前
Netty的原理和springboot项目整合
java·spring boot·后端·sql·科技·mysql·spring
Java程序之猿26 分钟前
Springboot 集成apache-camel +mqtt 根据主题处理mqtt消息
java·spring boot·后端
serendipity_hky36 分钟前
【go语言 | 第3篇】go中类的封装、继承、多态 + 反射
开发语言·后端·golang·反射
悟空码字1 小时前
SpringBoot 整合 ElasticSearch,给搜索插上“光速翅膀”
java·后端·elasticsearch
星浩AI1 小时前
手把手教你用 RAG 打造专属知识库问答系统
后端
喵个咪1 小时前
开箱即用的 GoWind Admin|风行,企业级前后端一体中后台框架:深度解析 Wire 依赖注入集成实践
后端·go
回家路上绕了弯1 小时前
代码的三大核心素养:如何同时兼顾可维护性、可扩展性、可测试性
分布式·后端
快手技术1 小时前
入围AA总榜Top 10,Non-Reasoning Model榜单第一!KAT-Coder-Pro V1 新版本踏浪归来!
前端·后端·前端框架