AutoMapper 基本使用

参考

【C#】AutoMapper 使用手册 - 丹枫无迹 - 博客园 (cnblogs.com)

环境搭建

AutoMapper.Extensions.Microsoft.DependencyInjection

服务注册

builder.Services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies());

创建实体类

转换前类

csharp 复制代码
namespace AutoMapper_01.Entities
{
    public class User
    {
        public int Id { get; set; }
        public string firstName {  get; set; }
        public string lastName { get; set; }
        public bool gender { get; set; }

        public DateTime DateOfBirth { get; set; }   
    }
}

转换后类

csharp 复制代码
namespace AutoMapper_01.Entities
{
    public class UserDto
    {
        public int Id { get; set; }
        public string name { set;get; }
        public bool sex { get; set; }

        public int Age { get; set; }
    }
}

创建映射关系

typescript 复制代码
using AutoMapper;
using AutoMapper_01.Entities;

namespace AutoMapper_01.profiles
{
    public class UserProfile:Profile
    {
        public UserProfile()
        {
            CreateMap<User,UserDto>()
                .ForMember(
                    dest=>dest.sex,
                    opt => opt.MapFrom(src=>src.gender)
                )
                .ForMember(
                    dest => dest.name,
                    opt => opt.MapFrom(src => $"{src.firstName} {src.lastName}")
                )
                .ForMember(
                    dest => dest.Age,
                    opt => opt.MapFrom(src => DateTime.Now.Year - src.DateOfBirth.Year)
                );
        }
    }
}

测试

ini 复制代码
using AutoMapper;
using AutoMapper_01.Entities;
using Microsoft.AspNetCore.Mvc;
using System.Diagnostics;

namespace AutoMapper_01.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class Demo : ControllerBase
    {
        private readonly IMapper _mapper;

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

        [HttpGet(Name = "Test")]
        public Object Get()
        {
            User user = new User{
                Id = 1,
                firstName = "f1",
                lastName = "l1",
                gender = true,
                DateOfBirth = new DateTime(1970,10,6) ,
            };
            Console.WriteLine(user.Id);
            var userDto = _mapper.Map<UserDto>(user);

            User user2 = new User{
                Id = 2,
                firstName = "f2",
                lastName = "l2",
                gender = false,
                DateOfBirth = new DateTime(2019, 1, 26),
            };
            List<User> users = new List<User>();
            users.Add(user);
            users.Add(user2);
            var userDtos = _mapper.Map<List<UserDto>>(users);

            return new {
                userDto = userDto,
                userDtos = userDtos
            }; 
        }
    }
}
相关推荐
HelloDam1 分钟前
基于元素小组的归并排序算法
后端·算法·排序算法
Net分享2 分钟前
在 ASP.NET Core 中使用 Confluent.Kafka 实现 Kafka 生产者和消费者
后端
HelloDam2 分钟前
单元格法近似求解多边形最大内接矩形问题【思路讲解+java实现】
后端
Winwoo4 分钟前
服务端推送 SSE
后端
Apifox1 小时前
如何在 Apifox 中通过 Runner 运行包含云端数据库连接配置的测试场景
前端·后端·ci/cd
uhakadotcom1 小时前
使用 Model Context Protocol (MCP) 构建 GitHub PR 审查服务器
后端·面试·github
Asthenia04121 小时前
详细分析:ConcurrentLinkedQueue
后端
uhakadotcom1 小时前
Ruff:Python 代码分析工具的新选择
后端·面试·github
uhakadotcom1 小时前
Mypy入门:Python静态类型检查工具
后端·面试·github
喵个咪1 小时前
开箱即用的GO后台管理系统 Kratos Admin - 定时任务
后端·微服务·消息队列