【C#/.NET】不用AutoMapper,我用啥呢?

微信公众号:趣编程ACE
关注可了解更多的.NET日常实战开发技巧。如需源码请后台留言源码;
**[如果觉得对您有帮助,欢迎关注]

TinyMapper简介

本文来自社区群粉丝投稿

TinyMapper是一个.NET平台下的一个轻量级对象映射工具,号称是.Net平台下最快的对象映射组件,性能是AutoMapper的6倍。今天我们来在.Net6下演示如何快速使用这个组件。

278f00bafadb2357173d7d54be41310c.png

官网地址:http://tinymapper.net/

安装

1.新建一个Web Api项目

ac5675231eaabfc17c151d18f2d7c2a1.png

2.安装Nuget包

38ed7956cf0aedce85b70f00a502cceb.png

创建实体以及映射类型

1.新建一个Model类,里面包括数据库实体和DTO

namespace TinymapperDemo.Models
{/// <summary>/// 数据库实体DTO/// </summary>public class PersonDto {public string? Name { get; set; }public string? Address { get; set; }public string? Phone { get; set; }}/// <summary>/// 数据库实体 用的 record 类型标记/// </summary>/// <param name="Id"></param>/// <param name="UserName"></param>/// <param name="City"></param>/// <param name="Street"></param>/// <param name="Phone"></param>public record Person(int Id,string UserName,string City,string Street,string Phone);}

从数据库获取实体数据

新建一个UserManger类,代替仓储模拟从数据库获取实体数据

public class UserManage : IUserManage
{/// <summary>/// 模拟从数据库获取数据/// </summary>/// <returns></returns>public Person[] GetPerson(){return new[] {new Person(1,"Jarry","Suzhou","Guan qian","1232322323"),new Person(1,"Test","Suzhou","Shan tang","3232324332")};}
}namespace TinymapperDemo.Services
{public interface IUserManage{Person[] GetPerson();}
}

服务获取

生成UserService服务,提供给API接口调用

namespace TinymapperDemo.Services
{public class UserService:IUserService{private readonly IUserManage userManage;public UserService(IUserManage userManage){this.userManage = userManage;}public PersonDto GetPersonDto(string name){var persons = userManage.GetPerson();var model =persons.FirstOrDefault(f => f.UserName.IndexOf(name) >= 0);// 常规转化方法如下//return new PersonDto()//{//    Name = model?.UserName,//    Address = model?.City + model?.Street,//    Phone = model?.Phone//};//  使用TinyMapper 转化 // 除了下面这步转化呢  还需要再Program.cs 里面配置一下  TinyMapper.Bind<Person, PersonDto>();  // 必不可省return TinyMapper.Map<PersonDto>(model);}}public interface IUserService{PersonDto GetPersonDto(string name);}
}

服务注册

builder.Services.AddSingleton<IUserManage, UserManage>();  // 注册仓储
builder.Services.AddSingleton<IUserService, UserService>();  // 注册服务TinyMapper.Bind<Person, PersonDto>();  // 必不可省

额外用法

1:对于TinyMapper简单类转化用法,我们可以手动配置,比如:

// Person 为实体  PersonDto 为Dto 实体转化到Dto 
TinyMapper.Bind<Person, PersonDto>(c =>{c.Ignore(f => f.Id);  // 忽略字段c.Bind(s => s.UserName, d => d.Name);c.Bind(s => s.City, d => d.Address);c.Bind(s => s.Phone, d => d.Phone);}
);

2.对于复杂字段,我们可以自定义转化配置:用法如下:
首先新建一个转化类:CustomConveter 继承TypeConverter这个抽象类。

public class CustomConveter: TypeConverter {}

接着重写两个基方法 CanConvertTo ConvertTo

public class CustomConveter: TypeConverter{public override bool CanConvertTo(ITypeDescriptorContext? context, Type? destinationType){return destinationType== typeof(PersonDto);}public override object? ConvertTo(ITypeDescriptorContext? context, CultureInfo? culture, object? value, Type destinationType){var conveterValue = value as Person;var personDto = new PersonDto{Address = conveterValue?.City + conveterValue?.Street,  // 地址拼接为 城市+街道的形式Phone = conveterValue?.Phone,Name = conveterValue?.UserName};return personDto;}}

最后我们在实体类上绑上上面写好的自定义转化特性

[TypeConverter(typeof(CustomConveter))]public record Person(int Id,string UserName,string City,string Street,string Phone);

大功告成。。。。。。以上就是官网演示的方法,我在.Net6 平台上面复现了一下,感谢观阅!

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

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

相关文章

大数据算法与分析技术国家工程实验室将建设

国家发展改革委近日正式下发通知&#xff0c;同意由西安交通大学作为承担单位&#xff0c;国家电网公司全球能源互联网研究院作为联合共建单位&#xff0c;筹建“大数据算法与分析技术国家工程实验室”。 国网信通部落实公司党组关于推进大数据的要求&#xff0c;组织联研院等单…

HBase键值分片的简单运用

1.基本原理介绍 HBase的存储是通过行键建立索引进行存储的&#xff0c;而且HBase只支持一级索引&#xff0c;因此只要通过行键才能很快的找到需要的数据。HBase是一个分布式的系统&#xff0c;HBase通过行键的分片&#xff0c;把不同的数据存储在不同的主机上。1).顺序分片依据…

我要3万取款机怎么取_7万的新宝骏RS-3怎么样?用车三个月后,车主说出了实话...

小型SUV领域&#xff0c;作为目前SUV市场之中竞争最激烈的细分领域之一&#xff0c;已经成为众多车企的必争之地。而正因如此&#xff0c;小型SUV市场所具有的车型非常的丰富&#xff0c;且其中更是一点也不缺爆款车型&#xff0c;正如在去年底刚上市的一款小型SUV——新宝骏RS…

大一python题库刷题训练_python实现合工大试题库自动刷题

1 #coding utf-8 2 importre3 importrequests4 importxlrd5 6 save_url "http://tkkc.hfut.edu.cn/student/exam/manageExam.do?1479131327464&methodsaveAnswer" 7 #index用于提示题目序号 8 index 1 9 headers {"User-Agent": "Mozilla/5.0…

MODIS数据说明

MODIS目前主要存在于两颗卫星上&#xff1a;TERRA和AQUA。TERRA卫星每日地方时上午10:30时过境&#xff0c;因此也把它称作地球观测第一颗上午星(EOS-AM1)。AQUA每日地方时下午过境&#xff0c;因此称作地球观测第一颗下午星(EOS-PM1)。两颗星相互配合&#xff0c;每1-2天可重复…

IOS学习笔记二十三对象归档(NSKeyedArchiver、NSKeyedUnArchiver、NSCodeing)

1、NSKeyedArchiver、NSKeyedUnArchiver 1&#xff09;、archiveRootObject:toFile 归档对象到这个路径文件 2&#xff09;、unarchiveObjectWithFile:从这个路径文件把对象进行恢复 对象归档这里我们可以理解Android里面的序列化&#xff0c;就是把对象保存到文件持久化&am…

.NET 为大型应用接入 ApplicationStartupManager 启动流程框架

对于大型的应用软件&#xff0c;特别是客户端应用软件&#xff0c;应用启动过程中&#xff0c;需要执行大量的逻辑&#xff0c;包括各个模块的初始化和注册等等逻辑。大型应用软件的启动过程都是非常复杂的&#xff0c;而客户端应用软件是对应用的启动性能有所要求的&#xff0…

6-子查询理解

单行子查询 1.查询工资比200号员工工资高的员工 分析&#xff1a; 比200号员工工资高,首先需要知道的是200号员工的工资,可以通过sql语句 SELECT SALARY FROM HR.EMPLOYEES WHERE EMPLOYEE_ID200;得到 然后需要的是写一条SQL语句:查询工资大于?的数据 SELECT * FROM HR.EMPLOY…

计算机文化教程实验基础知识,《计算机文化基础上机实验教程》孙家启、黄晓梅、刘奎 著_孔网...

《计算机文化基础上机实验教程》是安徽省高等学校“十一五”规划教材——《计算机文化基础教程》的配套实验教材。本教程共安排了19个实验&#xff0c;内容包括计算机基础知识(1个实验)、windows2000中文操作系统(3个实验)、中文文字处理软件Word2000(5个实验)、中文电子表格处…

思科为其核心网络业务增加了订阅服务

据国外媒体报道&#xff0c;思科系统公司的核心网络业务于周二开始进军订阅服务市场&#xff0c;其向大型企业宣布了一系列新的安全和自动化工具。 这个新的“直观网络”代表了思科如何从其旗舰业务中获得收入的重大变化。San Jose公司一直依赖于网络设备的销售&#xff0c;这些…

fpga map测试_一种基于SELECTMAP的可配置且高速的FPGA配置电路及实现方法与流程

本发明属于计算机工程领域&#xff0c;与SoC密切相关。具体涉及一种FPGA配置电路及实现方法。背景技术&#xff1a;随着大数据的发展&#xff0c;计算能力的提升&#xff0c;人工智能近两年迎来了新一轮的爆发。2016年谷歌AlphaGo赢得了围棋大战后&#xff0c;人工智能在产业界…

超全局变量数组get post requerst resver的使用规则

超全局变量数组的概念不同于全局变量&#xff0c;这里我主要说的是用来接收信息用的。其实在以往已经大量使用了首先&#xff1a;get数组&#xff0c;速度较好&#xff0c;但是相对不是很安全。post数组&#xff0c;可以接收大的数据量&#xff0c;较安全&#xff0c;最常用。r…

遥感RS植被指数大全整理

本文整理了遥感中的常见指数及计算方法:植被指数、归一化植被指数、比值植被指数、差值植被指数、土壤调节植被指数、变换的土壤调节植被指数、修整的土壤调节植被指数、正交植被指数、绿度植被指数。 目录 一、VI - Vegetation Index - 植被指数 二、NDVI - Normalized Dif…

if函数python_pythonif函数

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; python的内置的函数round() a 1.12586 #保留小数的函数,四舍五入&#xff0c;参数为保留小数点后的位数 pr…

IOS学习笔记二十四(NSData归档多个对象和归档对象实现深复制)

1、NSData归档多个对象 一、之前我写的学习笔记都是归档一个对象&#xff0c;如果需要归档多个对象我们需要借助NSData 二、步骤 1&#xff09;、NSMutableData作为参数&#xff0c;构建 NSKeyedArchiver对象 2&#xff09;、调用NSKeyedArchiver的encodeXXX 3)、调用NSKeyed…

Android渠道包自动化验证

随着产品发布越来越快&#xff0c;渠道包越来越多&#xff0c;渠道包自动化验证重要性逐渐凸显出来&#xff0c;需要将大把的人力从中解放出来&#xff0c;且避免人工失误造成的验证不完全&#xff1b;最近客户端产品尝试使用渠道包自动化测试的方法&#xff0c;这里说说我们目…

Foundatio - .Net Core用于构建分布式应用程序的可插拔基础块

简介Foundatio - 用于构建分布式应用程序的可插拔基础块•想要针对抽象接口进行构建&#xff0c;以便我们可以轻松更改实现。希望这些块对依赖注入友好。•缓存&#xff1a;我们最初使用的是开源 Redis 缓存客户端&#xff0c;但后来它变成了具有高许可成本的商业产品。不仅如此…

JQuery 判断滚动条是否到底部

1 BottomJumpPage: function () {2 var scrollTop $(this).scrollTop();3 var scrollHeight $(document).height();4 var windowHeight $(this).height();5 if (scrollTop windowHeight scrollHeight) { //滚动到底部执…

开讲啦观后感2017计算机科学家,开讲啦观后感2017

1 开讲啦观后感2017(一)是因为有爱&#xff0c;我才付出的&#xff0c;因为是我爱的&#xff0c;而我又付出了&#xff0c;所以我会更爱。这是郑教授的演讲《你为什么读大学》中给我映像最深刻的一句话。我也能从这句话中找到我读大学的原因因为我爱。古时候说你十年寒窗苦读&a…

ENVI IDL读写数据

最近写程序不知道怎么写envi标准格式文件的头文件&#xff0c;在网上搜了半天&#xff0c;也没找到相关的信息。找到一个 ENVI_SETUP_HEAD函数&#xff0c;也不知怎么用。下面的内容可能以后用的着&#xff0c;先留着吧。 引用自&#xff1a;http://bbs.esrichina-bj.cn/ESRI/v…