C#对象映射器之Mapster

简介

Mapster是一个快,小巧,功能强大的对象映射.Net框架

例子

我有两个Model类且他们的属性一致,我们将 SourceObjectTest赋值给DestObjectTest该怎么做?

SourceObjectTest sourceObject = new SourceObjectTest();
sourceObject.Name = "张三";
sourceObject.Age = new List<int> { 20, 13, 26 };
sourceObject.Address = "XX省XX市XX县";
sourceObject.Sex = "男";

常规做法

public void Routine(SourceObjectTest sourceObject)
{
DestObjectTest destObject = new DestObjectTest();destObject.Name = sourceObject.Name;
destObject.Sex = sourceObject.Sex;
destObject.Address = sourceObject.Address;
destObject.Age = sourceObject.Age;
}

这种类型的代码写起来相当枯燥乏味且累那么我们可不可以用第三方的库来解决这种问题呢,那肯定是可以的,像AutoMapper和Mapster就是解决这种问题的,而我为什么选择Mapster,主要还是Mapster性能更好!

安装Mapster包

0861f2fe5dc1a3d407fbf6f233f759a2.png

使用Mapster

基本映射之映射到新对象

public void BasicMappingNewObject(SourceObjectTest sourceObject){DestObjectTest destObject= sourceObject.Adapt<DestObjectTest>();}

基本映射之映射到现有对象

public void BasicMappingExistObject(SourceObjectTest sourceObject){DestObjectTest destObject = new DestObjectTest();destObject.Name = "李四";destObject.Age = new List<int> { 20 };destObject.Address = "中国XX省XX市XX县";destObject.Sex = "女";    destObject = sourceObject.Adapt(destObject);}

自定义映射

当我们的映射对象的属性与源对象的属性不一致时我们就可以使用!eg:SourceObjectTest的name属性和DifferentDestObjectTest的UserName是一个意思,只是创建Model类的时候取得名字不一样,这时候基本映射映射不了UserName字段,那我们就要使用自定义映射了!

一:直接在 TypeAdapterConfig 配置对象的映射关系

public void BasicMappingExtend(SourceObjectTest sourceObject)
{
var config = new TypeAdapterConfig();
config.ForType<SourceObjectTest, DifferentDestObjectTest>().Map(dest => dest.UserName, src => src.Name).Map(dest => dest.Address, src => src.Name + src.Address);
var mapper = new Mapper(config);DifferentDestObjectTest differentDestObjectTest = mapper.Map<DifferentDestObjectTest>(sourceObject);
}

二:使用接口的方式

public class DifferentDestObjectTestRegister : IRegister{public void Register(TypeAdapterConfig config){config.ForType<SourceObjectTest, DifferentDestObjectTest>().Map(dest => dest.UserName, src => src.Name).Map(dest => dest.Address, src => src.Name + src.Address);}}public void BasicMappingExtend(SourceObjectTest sourceObject){var config = new TypeAdapterConfig();config.Scan(Assembly.GetExecutingAssembly());var mapper = new Mapper(config);DifferentDestObjectTest differentDestObjectTest = mapper.Map<DifferentDestObjectTest>(sourceObject);}

三:使用映射配置

public void MappingConfig(SourceObjectTest sourceObject){TypeAdapterConfig<SourceObjectTest, DifferentDestObjectTest>.NewConfig().Map(dest => dest.UserName,src => src.Name);DifferentDestObjectTest differentDestObjectTest = TypeAdapter.Adapt<SourceObjectTest, DifferentDestObjectTest>(sourceObject);}

当然还有其它功能,可前往官网!- 传送门!

最后大家如果喜欢我的文章,还麻烦给个关注并点个赞, 希望net生态圈越来越好!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何关闭Struts2的webconsole.html

出于安全目的&#xff0c;在禁用了devMode之后&#xff0c;仍然不希望其他人员看到webconsole.html页面&#xff0c;则可以直接删除webconsole.html 的源文件&#xff0c; 它的位置存在于&#xff1a; 我们手工删除 struts2-core-*.jar\org\apache\struts2\interceptor\debuggi…

UIView 的基础

UIView•什么是控件&#xff1f;-屏幕上的所有UI元素都叫做控件&#xff0c;也有人叫做视图、组件-按钮&#xff08;UIButton&#xff09;、文本&#xff08;UILabel&#xff09;都是控件•控件的共同属性有哪些&#xff1f;-尺寸-位置-背景色-......-•苹果将控件的共同属性都…

记录平时编程或者阅读英文文档的时候不认识的英文单词

一、目的 英语虽然过了4级&#xff0c;但是还是很多英文单词不认识&#xff0c;为了以后能更好的阅读英文文档和函数的英文注释&#xff0c;记录自己不认识的英文单词&#xff0c;方便以后复习&#xff0c;这里后面会持续更新&#xff0c;因为放在网上这个平台不会弄丢。 二、…

php本地的调试安装,教你本地安装、运行、调试PHP程序

安装工具对学习PHP的新手来说&#xff0c;WINDOWS下环境配置是一件很困难的事&#xff1b;至少对于我来说本地调试PHP程序比登天还要困难&#xff0c;繁荣拖沓的各种程序。以前我博客程序用的是PJBLOG&#xff0c;本地的IIS就完全可以搞定&#xff0c;但是自从换了WordPress之后…

如何从一个 C# 的 dump 中挖到机器相关的信息?

前段时间有位朋友问我&#xff0c;如何从 dump 中提取出哪些和机器相关的信息&#xff1f;比如&#xff1a;机器内存大小&#xff0c;cpu核数&#xff0c;机器名&#xff0c;机器的环境变量 等等。那如何提取到里面的信息呢&#xff1f;当然我也没说全部可以提取的到。。。这里…

9.3磁盘及文件系统管理详解

练习&#xff1a;4 调整其预留百分比为3%#tune2fs -m 3 -L DATA /dev/sda75 以重新挂载此文件系统为不更新访问时间戳&#xff0c;并验证其效果#stat /backup/inittab# cat /backup/inittab# stat# mount -o remount,noatime /backup# cat # stat6 对此文件系统强行做一次检测e…

LeetCode() Word Search II

超时&#xff0c;用了tire也不行&#xff0c;需要再改。 class Solution {class TrieNode { public:// Initialize your data structure here.TrieNode() {for(int i0;i<26;i)next[i]NULL;isString false;}TrieNode *next[26];bool isString; };class Trie { public:Trie()…

java之通过FileChannel实现文件复制

1、FileChanel介绍 Java NIO FileChannel是连接文件的通道&#xff0c;从文件中读取数据和将数据写入文件。Java NIO FileChannel类是NIO用于替代使用标准Java IO API读取文件的方法。 FileInputStream的getChannel方法获取的文件通道是只读的&#xff0c;当然通过FileOutput…

Python版的Hello World

print “Hello World” 或者print("Hello World")

如何获取当前C#程序所有线程的调用栈信息 ?

咨询区 Daniel Sperry请问如何获取 .NET 程序当前所有线程的调用栈信息&#xff1f;我知道在 java 中只需调用 java.lang.Thread.getAllStackTraces() 方法即可。回答区 Will Calderwood在 .NET 中并不容易实现&#xff0c;但可以使用诊断库 ClrMD &#xff0c;可以在 nuget 上…

JS

为什么80%的码农都做不了架构师&#xff1f;>>> function getQueryString(name) {var reg new RegExp("(^|&)" name "([^&]*)(&|$)"),r window.location.search.substr(1).match(reg);if(r ! null) {return unescape(r[2]); }r…

织梦php远程连接数据库,用PHP连接Oracle for NT 远程数据库

用PHP连接Oracle for NT 远程数据库发布时间&#xff1a;2016-06-17 来源&#xff1a; 点击:次我以前用php连接远程oracle8.0.5 for NT 企业版,用ODBC,oracle接口均不行。急煞我也&#xff01;寻寻觅觅&#xff0c;终于找到了连接的正确方法&#xff0c;我这里用OCI接口&#x…

ssh公钥免密码登录

2019独角兽企业重金招聘Python工程师标准>>> ssh 无密码登录要使用公钥与私钥。linux下可以用用ssh-keygen生成公钥/私钥对&#xff0c;下面我以CentOS为例。 有机器A(192.168.1.155)&#xff0c;B(192.168.1.181)。现想A通过ssh免密码登录到B。 首先以root账户登陆…

java之Synchronized(锁住对象和锁住代码)

1、问题 Synchronized我们一般都知道是锁&#xff0c;但是我们怎么区分是锁对象还是锁代码呢&#xff1f; 2、测试Demo package leetcode.chenyu.test;public class Synchronized {class Test {public synchronized void testFirst() {print("testFirst");}public…

Spring4Shell的漏洞原理分析

Spring框架最新的PoC这两天出来的一个RCE漏洞&#xff0c;但是有以下的条件限制才行&#xff1a;必须是jdk9及以上必须是部署在tomcat的应用是springmvc的或者webflux的应用具体的可以查看spring官方&#xff1a;https://spring.io/blog/2022/03/31/spring-framework-rce-early…

ArcGIS Python

1.遍历指定文件夹下的Grid格式的Raster import arcpy arcpy.env.workspace "D:\GLC_2000\China_gridv3\Grid" rasters arcpy.ListRasters("*", "GRID") for raster in rasters:print(raster) 结果&#xff1a; china_v3 china_v3_pro 2.遍…

php 点对点,浅析点对点(End-to-End)的场景文字识别

一、背景随着智能手机的广泛普及和移动互联网的迅速发展&#xff0c;通过手机等移动终端的摄像头获取、检索和分享资讯已经逐步成为一种生活方式。基于摄像头的(Camera-based)的应用更加强调对拍摄场景的理解。通常&#xff0c;在文字和其他物体并存的场景&#xff0c;用户往往…

spring boot aop 记录方法执行时间

了性能调优&#xff0c;需要先统计出来每个方法的执行时间&#xff0c;直接在方法前后log输出太麻烦&#xff0c;可以用AOP来加入时间统计 添加依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-ao…

linux工具:ssh---未完

ssh server_ip 或者 ssh usernameserver_ip 或者 ssh usernameserver_name , 再按提示输入密码. _____________________________ Can login to remote boxBut I already have telnetCan login to remote box without passwordBut I don’t care input passowrd everytimeCan ex…