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
            }; 
        }
    }
}
相关推荐
举大栗子16 小时前
基于Java的Socket.IO服务端基础演示
后端
用户693717500138416 小时前
14.Kotlin 类:类的形态(一):抽象类 (Abstract Class)
android·后端·kotlin
组合缺一17 小时前
Spring Boot 国产化替代方案。Solon v3.7.2, v3.6.5, v3.5.9 发布(支持 LTS)
java·后端·spring·ai·web·solon·mcp
s***117017 小时前
常见的 Spring 项目目录结构
java·后端·spring
7***477117 小时前
在2023idea中如何创建SpringBoot
java·spring boot·后端
IT_陈寒18 小时前
React性能优化:这5个Hooks技巧让我减少了40%的重新渲染
前端·人工智能·后端
L***d67018 小时前
十七:Spring Boot依赖 (2)-- spring-boot-starter-web 依赖详解
前端·spring boot·后端
本妖精不是妖精18 小时前
基于 Rokid Max 与 JSAR 构建空间锚定型 AR 信息面板
后端·ar·restful
芳草萋萋鹦鹉洲哦18 小时前
【tauri+rust】App会加载白屏,有时显示在左上角显示一小块,如何优化
开发语言·后端·rust