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
            }; 
        }
    }
}
相关推荐
天上掉下来个程小白1 小时前
添加购物车-02.代码开发
java·服务器·前端·后端·spring·微信小程序·苍穹外卖
幽络源小助理2 小时前
懒人美食帮SpringBoot订餐系统开发实现
java·spring boot·后端·美食
源码云商5 小时前
基于Spring Boot + Vue的母婴商城系统( 前后端分离)
java·spring boot·后端
还听珊瑚海吗8 小时前
基于SpringBoot的抽奖系统测试报告
java·spring boot·后端
你怎么知道我是队长11 小时前
Go语言标识符
后端·golang
sco528215 小时前
SpringBoot 自动装配原理 & 自定义一个 starter
java·spring boot·后端
海风极客16 小时前
《Go小技巧&易错点100例》第三十三篇
开发语言·后端·golang
养军博客16 小时前
Spring boot 简单开发接口
java·spring boot·后端
计算机学姐18 小时前
基于SpringBoot的在线教育管理系统
java·vue.js·spring boot·后端·mysql·spring·mybatis
有梦想的攻城狮19 小时前
spring中的@Value注解详解
java·后端·spring·value注解