<b>閱讀目錄</b>
<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_TinyMapper.html#_label0">1.Tiny Mapper基本介紹</a>
<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_TinyMapper.html#_label1">2.Tiny Mapper 基本使用</a>
<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_TinyMapper.html#_label2">3.Tiny Mapper 指定配置使用</a>
<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_TinyMapper.html#_label3">4.Tiny Mapper複雜類型使用</a>
<a href="http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_TinyMapper.html#_label4">5.資源</a>
好久沒有寫文章,工作甚忙,但每日還是關注.NET領域的開源項目。五一休息,放松了一下之後,今天就給大家介紹一個輕量級的對象映射工具Tiny Mapper:号稱是.NET平台最快的對象映射元件。那就一起看看呢。
Tiny Mapper是一個.net平台開源的對象映射元件。說到.NET平台的對象映射,大名鼎鼎的可能就是AutoMapper。那先看看Tiny Mapper的特點
這是Tiny Mapper标榜最大的特點之一:快。那究竟有多快,我們看看官方的測試截圖,由于時間緊張,我沒有進行測試對比,有空試試。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuMTOyIDO0gTOxETL3AjN1AjMwEjMyATNwYTMwITLzAjN5czLcVDM2EDMy8CXzAjN5czLcd2bsJ2Lc12bj5ycn9Gbi52YuUTMwIzcldWYtl2Lc9CX6MHc0RHaiojIsJye.png)
使用TinyMapper非常簡單,它的設計簡單,使用NuGet包,可以快速安裝使用,DLL也才50K大小不到,是以非常輕量級。
TinyMapper是一個開源項目,是以你可以參與更新和自己修改代碼。
首先,通過NuGet下載下傳安裝Tiny Mapper,如下圖:
然後添加引用:
1
2
<code>using</code> <code>Nelibur.ObjectMapper;</code>
<code>using</code> <code>Nelibur.ObjectMapper.Bindings;</code>
接下來,我們準備2個要互相映射的類型,Person和PersonDto,結構分别如下:
3
4
5
6
7
8
9
10
11
12
<code>public</code> <code>class</code> <code>Person</code>
<code>{</code>
<code> </code><code>public</code> <code>String Id { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code> </code><code>public</code> <code>String Name { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code> </code><code>public</code> <code>Int32 Age { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code>}</code>
<code>public</code> <code>class</code> <code>PersonDto</code>
那我們在代碼例如如何把其中一個類Person的對象映射為PersonDto呢?看看Tiny Mapper的使用,很簡單就2行:
13
14
<code>/// <summary>最簡單的2個類型之間的映射</summary></code>
<code>static</code> <code>void</code> <code>Test1()</code>
<code> </code><code>TinyMapper.Bind<Person,PersonDto>();</code>
<code> </code><code>//執行個體化一個Person對象</code>
<code> </code><code>var</code> <code>person = </code><code>new</code> <code>Person</code>
<code> </code><code>{</code>
<code> </code><code>Id = Guid.NewGuid().ToString(),</code>
<code> </code><code>Name = </code><code>"John"</code><code>,</code>
<code> </code><code>Age = 22</code>
<code> </code><code>}; </code>
<code> </code><code>//映射</code>
<code> </code><code>var</code> <code>personDto = TinyMapper.Map<PersonDto>(person);</code>
運作看看結果:
有時候對象的字段名稱并不一樣,而且可能要忽略某些字段,這個時候就要使用更加靈活的配置了。
看例子,為了示範,我們特意修改2個類型的字段名稱不一樣.如下:
<code> </code>
<code> </code><code>//注意這裡的字段名稱:UserName</code>
<code> </code><code>public</code> <code>String UserName { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code> </code><code>public</code> <code>Int32 Age { </code><code>get</code><code>; </code><code>set</code><code>; } </code>
映射代碼和配置如下所示:
15
16
17
<code>/// <summary>使用配置項指定和忽略字段</summary></code>
<code>static</code> <code>void</code> <code>Test2()</code>
<code> </code><code>TinyMapper.Bind<Person, PersonDto>(config =></code>
<code> </code><code>config.Ignore(x => x.Id);</code><code>//忽略ID字段</code>
<code> </code><code>config.Bind(x => x.Name, y => y.UserName);</code><code>//将源類型和目标類型的字段對應綁定起來</code>
<code> </code><code>config.Bind(x => x.Age, y => y.Age);</code><code>//将源類型和目标類型的字段對應綁定起來</code>
<code> </code><code>});</code>
<code> </code><code>};</code>
看看效果如何?我們指定的Id字段忽略映射,以及将源對象的字段映射到目标對象的指定字段了:
有時候對象的類型裡面嵌套着對象,或者數組等等,其實這個時候的使用和上述完全一樣,這裡隻是舉個例子,大家看看而已:
18
19
20
21
22
<code> </code><code>public</code> <code>Address Address { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code> </code><code>public</code> <code>List<String> Emails { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code>public</code> <code>sealed</code> <code>class</code> <code>Address</code>
<code> </code><code>public</code> <code>string</code> <code>Phone { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code> </code><code>public</code> <code>string</code> <code>Street { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
<code> </code><code>public</code> <code>string</code> <code>ZipCode { </code><code>get</code><code>; </code><code>set</code><code>; }</code>
映射的代碼和第3節類似:
23
<code>/// <summary>更複雜對象的映射例子</summary></code>
<code>static</code> <code>void</code> <code>Test3()</code>
<code> </code><code>//将源類型和目标類型的字段對應綁定起來</code>
<code> </code><code>config.Bind(x => x.Name, y => y.UserName);</code>
<code> </code><code>config.Bind(x => x.Age, y => y.Age);</code>
<code> </code><code>config.Bind(x => x.Address, y => y.Address);</code>
<code> </code><code>config.Bind(x => x.Emails, y => y.Emails);</code>
<code> </code><code>Age = 22,</code>
<code> </code><code>Address = </code><code>new</code> <code>Address() { Phone = </code><code>"1880393"</code><code>, Street = </code><code>"Shanghai"</code><code>, ZipCode = </code><code>"121212"</code> <code>},</code>
<code> </code><code>Emails = </code><code>new</code> <code>List<</code><code>string</code><code>>() { </code><code>"[email protected]"</code><code>, </code><code>"[email protected]"</code> <code>}</code>
效果如下:
本文轉自葉小钗 h資料之巅部落格園部落格,原文連結:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_TinyMapper.html,如需轉載請自行聯系原作者