好久没有写文章,工作甚忙,但每日还是关注.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,如下图:

然后添加引用:

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

/// <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个类型的字段名称不一样.如下:

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; }//注意这里的字段名称:UserNamepublic String UserName { get; set; }public Int32 Age { get; set; }
}

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

/// <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复杂类型使用

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

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节类似:

/// <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

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

  1. .NET平台开源项目速览(2)Compare .NET Objects对象比较组件

    原文:.NET平台开源项目速览(2)Compare .NET Objects对象比较组件 .NET平台开源项目速览今天介绍一款小巧强大的对象比较组件.可以更详细的获取2个对象的差别,并记录具体差别,比 ...

  2. .NET平台开源项目速览-最快的对象映射组件Tiny Mapper之项目实践

    晚上浏览博客园 看到一篇非常实用的博客:.NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper,花了10分钟简单了解了一下. 看评论也是挺有价值,同时也看到许多新手同学问道在实际项目 ...

  3. .NET平台开源项目速览(4).NET文档生成工具ADB及使用

    .NET平台开源项目速览(4).NET文档生成工具ADB及使用 原文:.NET平台开源项目速览(4).NET文档生成工具ADB及使用 很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习 ...

  4. .NET平台开源项目速览(11)KwCombinatorics排列组合使用案例(1)

    阅读目录 1.KwCombinatorics基本介绍 2.足球彩票排列组合应用 3.排列组合生成代码与测试 今年上半年,我在KwCombinatorics系列文章中,重点介绍了KwCombinator ...

  5. .NET平台开源项目速览(20)Newlife.Core中简单灵活的配置文件

    如果用知乎,可以关注专栏:.NET开源项目 记得5年前开始拼命翻读X组件的源码,特别是XCode,但对Newlife.Core 的东西了解很少,最多只是会用用,而且用到的只是九牛一毛.里面好用的东西太 ...

  6. .NET平台开源项目速览(1)SharpConfig配置文件读写组件

    原文:.NET平台开源项目速览(1)SharpConfig配置文件读写组件 在.NET平台日常开发中,读取配置文件是一个很常见的需求.以前都是使用System.Configuration.Config ...

  7. .NET平台开源项目速览(17)FluentConsole让你的控制台酷起来

    从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或 ...

  8. .NET平台开源项目速览(8)Expression Evaluator表达式计算组件使用

    在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,给大家初步介绍了一下Expression Evaluator验证组件.那里只是概述了一下,并没有对其使用和强大功能做 ...

  9. .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB

    今天给大家介绍一个不错的小巧轻量级的NoSQL文件数据库LiteDB.本博客在2013年也介绍过2款.NET平台的开源数据库: 1.[原创]开源.NET下的XML数据库介绍及入门 2.[原创]C#开源 ...

最新文章

  1. Java lambda 循环累加求和
  2. 《Red Hat Linux命令速查》—— 带你玩转字符游戏
  3. 在MSBuild.exe中使用条件编译(Conditional Compile)
  4. java+queue+se_「013期」JavaSE面试题(十三):多线程(3)
  5. java biginteger转int_如何在不使用java.math.BigInteger的情况下使用Java处理非常大的数字...
  6. C代码反汇编后的堆栈寄存器EBP和ESP
  7. Qt中QSS的简单使用
  8. 基于matlab的OFDM百度文库,基于matlab的OFDM仿真总结.doc
  9. java多线程交替打印_java多线程 更优雅的实现线程同步:交替打印A、B LockSupport实现...
  10. 小程序中里的bindinput_云开发实战分享|诗和远方:旅行小账本云开发
  11. 职场 | 算法是怎样决定你的职业生涯的
  12. Maven - Maven3实战学习笔记(3)使用maven构建Web应用
  13. Unicode编码表
  14. ps计算机设置,不仅要懂PS 浅谈修图电脑配置(基础篇)
  15. 斗鱼直播与熊猫直播竞品分析
  16. 教育公司邮箱申请哪个好?
  17. Zabbix+MatrixDB大规模监控与分析解决方案详解(含PPT)
  18. echarts 仿支付宝基金七日年化折线图
  19. 第6-8课:分离轴算法(SAT)与碰撞检测(图文篇)
  20. ps调整图片大小,像素大小

热门文章

  1. 机器学习奠基人Michael Jordan:下代技术是融合经济学,解读2项重要进展
  2. 2018年AI和ML(NLP、计算机视觉、强化学习)技术总结和2019年趋势
  3. 深度丨建立合资公司,深度参与运营:详解景驰的无人驾驶生意经
  4. 研究报告:城市大脑的起源、现状与未来趋势
  5. 让汽车软件进入 iPhone 时代!
  6. 程序员薪资两极分化,如何成为高薪程序员?
  7. 50 多万个项目陷入混乱!只因代码库许可协议不兼容
  8. 数智化浪潮之中,传统企业如何抓住转型机遇
  9. 投资圈中的“错过”之美:被大佬拒绝之后,他们成为了首富
  10. Linux海量数据高并发实时同步架构方案杂谈