Tiny Mapper是一个.net平台开源的对象映射组件

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

    public String Name { getset; }

    public Int32 Age { getset; }

}

public class PersonDto

{

    public String Id { getset; }

    public String Name { getset; }

    public Int32 Age { getset; }

}

那我们在代码例如如何把其中一个类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 { getset; }

    public String Name { getset; }

    public Int32 Age { getset; }

    

}

public class PersonDto

{

    public String Id { getset; }

    //注意这里的字段名称:UserName

    public String UserName { getset; }

    public Int32 Age { getset; }   

}

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


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

    public String Name { getset; }

    public Int32 Age { getset; }

    public Address Address { getset; }

    public List<String> Emails { getset; }

}

public class PersonDto

{

    public String Id { getset; }

    public String UserName { getset; }

    public Int32 Age { getset; }

    public Address Address { getset; }

    public List<String> Emails { getset; }

}

public sealed class Address

{

    public string Phone { getset; }

    public string Street { getset; }

    public string ZipCode { getset; }

}

映射的代码和第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>() { "[email protected]""[email protected]" }

    };

    var personDto = TinyMapper.Map<PersonDto>(person);

}

效果如下:

回到目录

5.资源

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

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

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

时间: 2024-10-17 11:38:23

Tiny Mapper是一个.net平台开源的对象映射组件的相关文章

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

心情小札:近期换了工作,苦逼于22:00后下班,房间一篇狼藉~ 小翠鄙视到:"你就适合生活在垃圾堆中!!!" 晚上浏览博客园 看到一篇非常实用的博客:.NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper,花了10分钟简单了解了一下. 看评论也是挺有价值,同时也看到许多新手同学问道在实际项目中使用的情况. 下面就原作者的代码的基础上略作调整,阐述一下在实际项目场景中的使用: 第一步:了解类库方法:TinyMapper 主要有两个函数: TinyMapper.Bind&

.NET平台开源文档与报表处理组件包括Execel PDF Word等

在前2篇文章这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧 和这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑)中,大伙热情高涨.再次拿出自己的私货,在.NET平台处理文档相关的开源组件.文档处理在开发中是一个非常常见的任务了,例如导出Excel,导出Word,生成PDF报表等等.那今天就看看下面这些.NET开源项目你知道不?如果有用,千万不要忘记推荐哦.同时个人能力有限,希望大家补充. .NET开源目录:[目录]本博客其他.NET开源项目文章目录 本文原文地

我发起了一个 .Net 平台上的 产生式编程 开源项目 GP.Net

大家好 , 我发起了一个 .Net 平台上的 产生式编程 开源项目 GP.Net . 我们可以先看看一个网友的 代码生成器 项目 : <.Net 代码生成器 for PostgreSql>    https://github.com/2881099/dotnetGen_postgresql <.Net 代码生成器 for Sql Server>     https://github.com/2881099/dotnetGen_sqlserver <.Net 代码生成器 for

edwin报警和监控平台开源了(python源码)

简单介绍一下edwin edwin是一个报警和监控平台, 可以使用它监控任意东西, 如有异常(分为警告级和严重级), 可以发出报警. 可以自定义报警的通知方式, 比如邮件/短信/电话. 另外, 它提供一个web UI,  上, 能以dashboard形式展现监控指标的状态. edwin对于监控项目的组织形式, 由小到大是:  check item -> pagelet ->page -> dashboard.  另外,可以为 check item指定一个或多个 team 来负责.  这样

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

从该系列的第一篇文章 .NET平台开源项目速览(1)SharpConfig配置文件读写组件 开始,不知不觉已经到第17篇了.每一次我们都是介绍一个小巧甚至微不足道的.NET平台的开源软件,或者学习,或者使用,或者介绍,或者分析原理等等,其实这个过程也让我了解了很多东西.也希望这个分享系列继续给大家带来收获,根据大家的评论和反应,其实说明这些小的组件都还不错,可以提高开发效率. 今天继续给大家介绍一款简单到爆的开源组件,但是可以让你的控制台瞬间高大上. 1.控制台能有啥滑头? 借用新生命论坛的一张

.NET平台开源项目速览(13)机器学习组件Accord.NET框架功能介绍

Accord.NET Framework是在AForge.NET项目的基础上封装和进一步开发而来.因为AForge.NET更注重与一些底层和广度,而Accord.NET Framework更注重与机器学习算法以及提供计算机视频.音频.信号处理以及统计应用相关的解决方案.该项目使用C#语言编写,项目主页:http://accord-framework.net/ 说明:该文章只是一个基本介绍,主要内容是翻译的官方文档和介绍,部分英文表述个人能力有限,不太熟悉,所以直接照搬原文,有比较确切的知道中文名

.NET平台开源项目速览(12)哈希算法集合类库HashLib

.NET的System.Security.Cryptography命名空间本身是提供加密服务,散列函数,对称与非对称加密算法等功能.实际上,大部分情况下已经满足了需求,而且.NET实现的都是目前国际上比较权威的,标准化的算法,所以还是安全可靠的.但也有一些场合,需要自己实现一些安全散列算法.不仅仅是学习,也可以进行测试以及相关研究.而今天要介绍的正式这样一个包括了目前几乎所有散列函数算法实现的.NET开源组件,大家可以实际使用,查看或者修改等.满足更多不同人,不同层次的需求.那就看看相关基础知识

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

转载自  http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_ADB_CSharpDocument.html 阅读目录 1.ADB介绍 2.ADB生成.NET文档过程 3.资源与代码 很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习一些开源项目的过程中,官方没有提供CHM帮助文档,所以为了快速的了解项目结构和注释.就生成文档来自己看,非常好用.这也是一个学习方法吧.例如本文在: .NET平台开源项目速览(2)Co

.NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家介绍.NET平台下的文档型数据库RavenDB,虽然我以前也在小项目用过其他文档型数据库,但问题很多,小项目还可以,大项目就歇菜了.这个数据库我关注了很久,最近一直在看它的文档,所以把知道的先总结下来. .NET开源目录:[目录]本博客其他.NET开源项目文章目录 本文原文地址:http://www