C#中使用Mapster

Mapster是一个开源的.NET对象映射库,它提供了一种简单而强大的方式来处理对象之间的映射。
多个映射框架的性能对比:
在这里插入图片描述

第一步安装Mapster

在这里插入图片描述

使用方法

public class Test
{
    public string name { get; set; }
    public string sex { get; set; }
    public string[] interest { get; set; }
}

public class Test1
{
    public string name { get; set; }
    public string sex { get; set; }
    public string address { get; set; }
    public string interest { get; set; }
}

        // 创建源对象
        var source = new Test
        {
            name = "张三",
            sex = "男",
            interest =new string[]{"唱","跳","rap"}
        };
        
        //这里我们可以做一些自定义映射  把数组类型字段处理成字符串
        TypeAdapterConfig<Test, Test1>.NewConfig()
    	.Map(m => m.interest , b => string.Join(',', b.interest )); // 自定义映射规则
        // 执行映射
        var test1Model= source.Adapt<Test1>();

		// 输出结果
		Console.WriteLine(test1Model.name ); // 输出:"张三"
        Console.WriteLine(test1Model.interest ); // 输出:"唱,跳,rap"

全局配置映射

如果我们每次在使用映射时都需要对一些字段进行特殊处理,那么会在每个使用的地方编写映射。
我们可以配置一个全局的通用映射关系,在程序启动时就定义映射关系。

首先编写一个配置文件

public class MapsterProfile
{
    public static void Configure()
    {
        // 设置全局配置  
        TypeAdapterConfig.GlobalSettings.Default
            .NameMatchingStrategy(NameMatchingStrategy.Flexible) // 设置属性名称匹配策略为灵活匹配  
            .PreserveReference(true); // 保留引用关系  

        //特定类型之间的映射配置
        TypeAdapterConfig<Test, Test1>.NewConfig()
    	.Map(m => m.interest , b => string.Join(',', b.interest )); // 自定义映射规则

        // 你可以继续为其他类型对添加配置...  
    }
}

然后在程序启动时调用配置方法
Program.cs文件

var builder = WebApplication.CreateBuilder(args);  
// 添加其他服务和中间件...  
 
// 配置Mapster映射  
MapsterProfile.Configure();  
 
var app = builder.Build();  
// 配置HTTP请求管道...  
app.Run();

然后在程序中如果想使用,可以直接

// 创建源对象
        var source = new Test
        {
            name = "张三",
            sex = "男",
            interest =new string[]{"唱","跳","rap"}
        };
var test1Model= source.Adapt<Test1>();//一句话就可以搞定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/674953.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光伏并网逆变器UL 1741:2021标准解析

光伏并网逆变器UL 1741:2021标准解析 不同国家的安规认证可以说是光伏逆变器走向国际市场的一张通行证&#xff0c;由于全球各国家的电网制式及并网政策的不同差异&#xff0c;这对逆变器测试顺利的通过安规测试认证 还是有一定的技术难度&#xff0c;也是中国光伏制造企业迫切…

在Linux中tomcat占用内存过高可以通过导出hprof日志来解决

自动导出hprof日志 第一种方法&#xff1a; Tomcat的hprof日志是一种用于分析Java堆内存使用情况的工具&#xff0c;它可以帮助开发人员找到内存泄漏的原因。 hprof日志可以在特定的时间点对Java堆内存进行快照&#xff0c;并生成详细的分析报告。 启用hprof日志导出的具体…

零基础写框架:从零设计一个模块化和自动服务注册框架

模块化和自动服务注册 基于 ASP.NET Core 开发的 Web 框架中&#xff0c;最著名的是 ABP&#xff0c;ABP 主要特点之一开发不同项目(程序集)时&#xff0c;在每个项目中创建一个模块类&#xff0c;程序加载每个程序集中&#xff0c;扫描出所有的模块类&#xff0c;然后通过模块…

“去员工化”这个潮流谁也挡不住,六大诱因分析。

去员工化→恐怕是未来工作的主流&#xff0c;一方面有成本的原因&#xff0c;另一方面也有技术进步、雇佣形式创新等原因&#xff0c;这个潮流有利也有弊&#xff0c;关键看我们是如何兴利除弊。 "去员工化"是指企业在运营中减少或取消传统雇佣制度&#xff0c;更多…

HOW - vscode 使用指南

目录 一、基本介绍1. 安装 VS Code2. 界面介绍3. 扩展和插件4. 设置和自定义 二、常用界面功能和快捷操作&#xff08;重点&#xff09;常用界面功能快捷操作 三、资源和支持 Visual Studio Code&#xff08;VS Code&#xff09;是一款由微软开发的免费、开源的代码编辑器&…

vue开发网站-使用插件element、vant 遇到的问题

1. js把两个字符串放进一个另字符串里&#xff0c;用逗号分隔 let string1 "Hello"; let string2 "World"; let result ${string1},${string2}; console.log(result); // 输出: Hello,World2.js将字符串转为数组 const str "Hello, world!"…

HBuilder中怎样修改每次输出的内容hello?每次修改之后再次“运行到”的时候,怎样保证每次都重新编译?

要修改每次输出的内容&#xff0c;可以在代码中找到输出的地方&#xff0c;并将内容进行修改。例如&#xff0c;在JavaScript中&#xff0c;可以使用console.log()函数输出内容。在修改内容后&#xff0c;保存代码。 为了保证每次运行都重新编译代码&#xff0c;可以按照以下步…

LeetCode 算法:接雨水c++

原题链接&#x1f517;&#xff1a;接雨水 难度&#xff1a;困难⭐️⭐️⭐️ 题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,…

使用 WM_WINDOWPOSCHANGING 跟踪窗口状态变化

在窗口位置变化过程的早期&#xff0c;系统会发送 WM_WINDOWPOSCHANGING 消息。 这个和 WM_WINDOWPOSCHANGED 消息不同&#xff0c;WM_WINDOWPOSCHANGED 消息发生在窗口位置变化之后。 一个关键的区别&#xff08;除了时间之外&#xff09;是&#xff0c;您可以通过处理 WM_WI…

OpenStreetMap部署(OSM)

参考&#xff1a;https://github.com/openstreetmap/openstreetmap-website/blob/master/DOCKER.md OpenStreeMap 部署 操作系统建议使用 Ubuntu 22 版本 安装 Docker # 更新软件包索引&#xff1a; sudo apt-get update # 允许APT使用HTTPS&#xff1a; sudo apt-get inst…

艰难求生的转型之路

起因 我个人“工作水平低&#xff0c;专业能力差。”是最核心的困难。 在坚持了快十年之后&#xff0c;博客从2015-2024。 2015201620172018201920202021202220232024 从2020年之后就已经开始全面转型之路。 所有传统赛道&#xff0c;都挤满了人&#xff0c;各种限制各种约…

【图像处理与机器视觉】灰度变化与空间滤波

基础 空间域与变换域 空间域&#xff1a;认为是图像本身&#xff0c;对于空间域的操作就是对图像中的像素直接进行修改 变换域&#xff1a;变换系数处理&#xff0c;不直接对于图像的像素进行处理 邻域 图像中某点的邻域被认为是包含该点的小区域&#xff0c;也被称为窗口 …

【Linux基础】安装redis

【Linux基础】安装redis 文章目录 【Linux基础】安装redis1、安装redis步骤2、启动redis3、redis停止 1、安装redis步骤 创建文件夹存放软件目录 [rootlocalhost ~]# mkdir /sort将Redis安装包上传到Linux到soft目录 解压安装包 cd /soft tar -xvf redis-4.0.0.tar.gz -C /usr/…

高速开箱机如何更加高效、智能化

在科技飞速发展的背景下&#xff0c;物流自动化已成为行业发展的必然趋势。其中&#xff0c;高速开箱机以其高效、精准的特性&#xff0c;在物流自动化领域大放异彩&#xff0c;成为推动行业发展的强大动力。星派将深入探讨高速开箱机在物流自动化中的应用与前景&#xff0c;展…

变现 5w+,一个被严重低估的 AI 蓝海赛道,居然用这个免费的AI绘画工具就能做!

大家好&#xff0c;我是画画的小强&#xff0c;致力于分享各类的 AI 工具&#xff0c;包括 AI 绘画工具、AI 视频工具、AI 写作工具等等。 但单纯地为了学而学&#xff0c;是没有任何意义的。 这些 AI 工具&#xff0c;学会了&#xff0c;用起来&#xff0c;才能发挥出他们的…

就凭这张图,下订华为享界S9

文 | Auto芯球 作者 | 雷慢 冲啦&#xff01;就在刚刚&#xff0c; 我们团队下订了一辆享界S9&#xff0c; 还琢磨买奔驰S级&#xff0c;宝马7系和奥迪A8的老板们&#xff0c; 是应该试试享界S9了&#xff0c; 至少先占个坑&#xff0c;8月底S9上市当天&#xff0c; 可以…

月入5000+?Midjourney制作小红书壁纸实现副业变现

一、制作步骤 使用Midjourney制作小红书壁纸的步骤比较简单&#xff0c;分为5步&#xff0c;其中最关键的步骤就是画出用户喜欢的壁纸。 1、绘画壁纸 在开始绘画之前&#xff0c;我们首先要确定好壁纸类型&#xff0c;小红书的壁纸类型有多种&#xff0c;包括剪纸类型、花草…

手机如何找回删除的视频?轻松有效的3个技巧分享!

无论是因为疏忽大意还是意外情况&#xff0c;视频被删除都是一个常见的问题&#xff0c;而视频作为一种重要的媒体形式&#xff0c;承载着我们的回忆和重要的信息&#xff0c;因此找回删除的视频具有重要的意义。该如何找回删除的视频呢&#xff1f;接下来&#xff0c;我们将详…

uniapp表格合并

最左边本来是三个td,但是要截图里面的效果,只需要rowspan"3" <tr><td rowspan"3" class"tdMoney1">A.2.8 经济来源</td><td class"tdMoney1" >A.2.8 经济1来源</td><td colspan"2"><…

4.21 Python实现将文件夹中的文件压缩

Python实现将文件夹中的文件压缩 可以使用 Python 的 shutil 和 os 模块来将文件夹 C:\Users\15640\Desktop\git\abc 中的所有文件打包成一个名为 abc.zip 的压缩包。 import shutil import os# 定义文件夹路径和压缩包名称 folder_path rC:\Users\15640\Desktop\git\abc zip_…