博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper
阅读量:6568 次
发布时间:2019-06-24

本文共 3447 字,大约阅读时间需要 11 分钟。

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

.NET开源目录:

本文原文地址: 

临时更新:感谢@ 的意见,为了避免新手误解,这里说明一下,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,如下图:

 

    然后添加引用:

using Nelibur.ObjectMapper;using Nelibur.ObjectMapper.Bindings;

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

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行:

/// 最简单的2个类型之间的映射static void Test1(){	TinyMapper.Bind
(); //实例化一个Person对象 var person = new Person { Id = Guid.NewGuid().ToString(), Name = "John", Age = 22 };   //映射 var personDto = TinyMapper.Map
(person);}

    运行看看结果:

 

3.Tiny Mapper 指定配置使用

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

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

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; }	}

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

/// 使用配置项指定和忽略字段static void Test2(){	TinyMapper.Bind
(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
(person);}

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

 

4.Tiny Mapper复杂类型使用

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

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
 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
 Emails { get; set; }}public sealed class Address{ public string Phone { get; set; } public string Street { get; set; } public string ZipCode { get; set; }}

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

/// 更复杂对象的映射例子static void Test3(){	TinyMapper.Bind
(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
() { "aaa@bb.com", "acx@cc.com" } }; var personDto = TinyMapper.Map
(person);}

效果如下:

  

5.资源

    Tiny Mapper官方网站:

    github项目地址:

    本文使用的代码下载:

转载地址:http://mdpjo.baihongyu.com/

你可能感兴趣的文章
silverlight中Combox绑定数据以及动态绑定默认选定项的用法
查看>>
浅谈算法和数据结构: 十 平衡查找树之B树
查看>>
【Algorithm】插入排序
查看>>
WCF寄宿到Windows Service
查看>>
Ajax.ActionLink()方法的使用
查看>>
csdn 泄露用户密码害人不浅啊。
查看>>
ThinkPadT440 Ubuntu14.04 RTL8192EE 链接无线网
查看>>
OpenCV Windows7 VC6.0安装以及HelloWorld
查看>>
苹果开发人员账号注冊流程
查看>>
微铺子点单系统具体介绍 - 争做国内最专业的微信商店平台,微信外卖订餐系统!...
查看>>
ExecuteScalar
查看>>
hdu1213 How Many Tables
查看>>
依赖注入框架Autofac的简单使用
查看>>
pomelo源代码分析(一)
查看>>
白话经典算法系列之七 堆与堆排序
查看>>
开机就提示“请安装TCP/IP协议,error=10106”的解决的方法
查看>>
一个HexToInt的C/C++函数
查看>>
使用SVN进行项目版本管理
查看>>
【vijos】1729 Knights(匈牙利)
查看>>
浅谈ASP.net处理XML数据
查看>>