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 小时前
Python能做嵌入式开发吗?一份写给动手派的生态与硬件全景图
后端·python
Sherotree7 小时前
Google Antigravity——Agent 被提到主界面
前端·ide·后端·edge浏览器
2601_962056238 小时前
Spring Boot 入门 与 无法解析符号 springframework 的解决
java·spring boot·后端
你驴我8 小时前
WhatsApp 多账号场景下的会话归档与历史消息检索优化实践
后端·python
学长毕业设计9 小时前
基于SpringBoot的瑜伽馆网站的设计与实现(源码+文档+讲解视频)
java·spring boot·后端
Rain的Java大神之路9 小时前
PC版网站被狂刷怎么处理
java·数据库·redis·后端·mysql·web安全·运维开发
学长毕业设计12 小时前
基于springboot的云南中草药知识普及管理网站的设计与开发(源码+文档+讲解视频)
java·spring boot·后端
烂蜻蜓12 小时前
Flask入门教程(八):视图函数详解——请求处理与响应的核心
后端·python·flask
卷无止境13 小时前
当FastAPI遇上机器学习,一个脚手架工具能省下多少工夫
后端·python·fastapi