.NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper

简介:

    好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目。五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件。那就一起看看呢。

.NET开源目录:【目录】本博客其他.NET开源项目文章目录

本文原文地址:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_TinyMapper.html 

临时更新:感谢@ 郭明锋的意见,为了避免新手误解,这里说明一下,Tiny Mapper的映射关系在Bind的时候,其实是将映射关系保存在一个静态的私有字典中,大家在使用的时候可以不需要每次都配置或者Bind。方法比较灵活,例如:你可以在实体类中封装一个方法,在方法内部进行映射关系的配置;你还可以将系统所有的配置映射关系放在一起,在使用前初始化一次就可以了。

1.Tiny Mapper基本介绍

    Tiny Mapper是一个.net平台开源的对象映射组件。说到.NET平台的对象映射,大名鼎鼎的可能就是AutoMapper。那先看看Tiny Mapper的特点

1.1 难以置信的快速

    这是Tiny Mapper标榜最大的特点之一:快。那究竟有多快,我们看看官方的测试截图,由于时间紧张,我没有进行测试对比,有空试试。

1.2 非常容易使用

    使用TinyMapper非常简单,它的设计简单,使用NuGet包,可以快速安装使用,DLL也才50K大小不到,所以非常轻量级。

1.3 开源

    TinyMapper是一个开源项目,所以你可以参与更新和自己修改代码。 

2.Tiny Mapper 基本使用

    首先,通过NuGet下载安装Tiny Mapper,如下图:

 

    然后添加引用:

1
2
using  Nelibur.ObjectMapper;
using  Nelibur.ObjectMapper.Bindings;

    接下来,我们准备2个要相互映射的类型,Person和PersonDto,结构分别如下:

1
2
3
4
5
6
7
8
9
10
11
12
public  class  Person
{
     public  String Id {  get set ; }
     public  String Name {  get set ; }
     public  Int32 Age {  get set ; }
}
public  class  PersonDto
{
     public  String Id {  get set ; }
     public  String Name {  get set ; }
     public  Int32 Age {  get set ; }
}

    那我们在代码例如如何把其中一个类Person的对象映射为PersonDto呢?看看Tiny Mapper的使用,很简单就2行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/// <summary>最简单的2个类型之间的映射</summary>
static  void  Test1()
{
     TinyMapper.Bind<Person,PersonDto>();
     //实例化一个Person对象
     var  person =  new  Person
     {
         Id = Guid.NewGuid().ToString(),
         Name =  "John" ,
         Age = 22
     };  
     //映射
     var  personDto = TinyMapper.Map<PersonDto>(person);
}

    运行看看结果:

 

3.Tiny Mapper 指定配置使用

有时候对象的字段名称并不一样,而且可能要忽略某些字段,这个时候就要使用更加灵活的配置了。

看例子,为了演示,我们特意修改2个类型的字段名称不一样.如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public  class  Person
{
     public  String Id {  get set ; }
     public  String Name {  get set ; }
     public  Int32 Age {  get set ; }
     
}
public  class  PersonDto
{
     public  String Id {  get set ; }
     //注意这里的字段名称:UserName
     public  String UserName {  get set ; }
     public  Int32 Age {  get set ; }   
}

    映射代码和配置如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/// <summary>使用配置项指定和忽略字段</summary>
static  void  Test2()
{
     TinyMapper.Bind<Person, PersonDto>(config =>
     {
         config.Ignore(x => x.Id); //忽略ID字段
         config.Bind(x => x.Name, y => y.UserName); //将源类型和目标类型的字段对应绑定起来
         config.Bind(x => x.Age, y => y.Age); //将源类型和目标类型的字段对应绑定起来
     });
     var  person =  new  Person
     {
         Id = Guid.NewGuid().ToString(),
         Name =  "John" ,
         Age = 22
     };
     var  personDto = TinyMapper.Map<PersonDto>(person);
}

    看看效果如何?我们指定的Id字段忽略映射,以及将源对象的字段映射到目标对象的指定字段了:

 

4.Tiny Mapper复杂类型使用

    有时候对象的类型里面嵌套着对象,或者数组等等,其实这个时候的使用和上述完全一样,这里只是举个例子,大家看看而已:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public  class  Person
{
     public  String Id {  get set ; }
     public  String Name {  get set ; }
     public  Int32 Age {  get set ; }
     public  Address Address {  get set ; }
     public  List<String> Emails {  get set ; }
}
public  class  PersonDto
{
     public  String Id {  get set ; }
     public  String UserName {  get set ; }
     public  Int32 Age {  get set ; }
     public  Address Address {  get set ; }
     public  List<String> Emails {  get set ; }
}
public  sealed  class  Address
{
     public  string  Phone {  get set ; }
     public  string  Street {  get set ; }
     public  string  ZipCode {  get set ; }
}

    映射的代码和第3节类似:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
/// <summary>更复杂对象的映射例子</summary>
static  void  Test3()
{
     TinyMapper.Bind<Person, PersonDto>(config =>
     {
         config.Ignore(x => x.Id); //忽略ID字段
 
         //将源类型和目标类型的字段对应绑定起来
         config.Bind(x => x.Name, y => y.UserName);
         config.Bind(x => x.Age, y => y.Age);
         config.Bind(x => x.Address, y => y.Address);
         config.Bind(x => x.Emails, y => y.Emails);
     });
     var  person =  new  Person
     {
         Id = Guid.NewGuid().ToString(),
         Name =  "John" ,
         Age = 22,
         Address =  new  Address() { Phone =  "1880393" , Street =  "Shanghai" , ZipCode =  "121212"  },
         Emails =  new  List< string >() {  "aaa@bb.com" "acx@cc.com"  }
     };
     var  personDto = TinyMapper.Map<PersonDto>(person);
}

效果如下:

  

5.资源

    Tiny Mapper官方网站:http://tinymapper.net/

    github项目地址:https://github.com/TinyMapper/TinyMapper

    本文使用的代码下载:TinyMapperDemo.rar


本文转自叶小钗 h数据之巅博客园博客,原文链接:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_TinyMapper.html,如需转载请自行联系原作者

相关文章
|
27天前
|
机器学习/深度学习 人工智能 Cloud Native
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台
在数字化时代,.NET 技术凭借其跨平台兼容性、丰富的类库和工具集以及卓越的性能与效率,成为软件开发的重要平台。本文深入解析 .NET 的核心优势,探讨其在企业级应用、Web 开发及移动应用等领域的应用案例,并展望未来在人工智能、云原生等方面的发展趋势。
32 3
|
1月前
|
存储 设计模式 编解码
.NET 8.0 通用管理平台,支持模块化、WinForms 和 WPF
【11月更文挑战第5天】本文分析了.NET 8.0 通用管理平台在模块化、WinForms 和 WPF 方面的优势。模块化设计提升了系统的可维护性和可扩展性,提高了代码复用性;WinForms 提供了丰富的控件库和简单易用的开发模式,技术成熟稳定;WPF 支持强大的数据绑定和 MVVM 模式,具备丰富的图形和动画功能,以及灵活的布局系统。
|
2月前
.NET 4.0下实现.NET4.5的Task类相似功能组件
【10月更文挑战第29天】在.NET 4.0 环境下,可以使用 `BackgroundWorker` 类来实现类似于 .NET 4.5 中 `Task` 类的功能。`BackgroundWorker` 允许在后台执行耗时操作,同时不会阻塞用户界面线程,并支持进度报告和取消操作。尽管它有一些局限性,如复杂的事件处理模型和不灵活的任务管理方式,但在某些情况下仍能有效替代 `Task` 类。
|
4月前
|
开发者 API Windows
从怀旧到革新:看WinForms如何在保持向后兼容性的前提下,借助.NET新平台的力量实现自我进化与应用现代化,让经典桌面应用焕发第二春——我们的WinForms应用转型之路深度剖析
【8月更文挑战第31天】在Windows桌面应用开发中,Windows Forms(WinForms)依然是许多开发者的首选。尽管.NET Framework已演进至.NET 5 及更高版本,WinForms 仍作为核心组件保留,支持现有代码库的同时引入新特性。开发者可将项目迁移至.NET Core,享受性能提升和跨平台能力。迁移时需注意API变更,确保应用平稳过渡。通过自定义样式或第三方控件库,还可增强视觉效果。结合.NET新功能,WinForms 应用不仅能延续既有投资,还能焕发新生。 示例代码展示了如何在.NET Core中创建包含按钮和标签的基本窗口,实现简单的用户交互。
77 0
|
5月前
|
存储 开发框架 前端开发
基于Lumisoft.NET组件,使用IMAP协议收取邮件
基于Lumisoft.NET组件,使用IMAP协议收取邮件
|
5月前
|
存储 对象存储 Python
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
`openpyxl`是一个用于读写Excel 2010 xlsx/xlsm/xltx/xltm文件的Python库。它不需要Microsoft Excel,也不需要.NET或COM组件。
|
3月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
46 7
|
3月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
74 0
|
4月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
55 0
|
4月前
|
开发框架 前端开发 安全
ASP.NET MVC 如何使用 Form Authentication?
ASP.NET MVC 如何使用 Form Authentication?