天天看點

.NET平台開源項目速覽(14)最快的對象映射元件Tiny Mapper1.Tiny Mapper基本介紹2.Tiny Mapper 基本使用3.Tiny Mapper 指定配置使用4.Tiny Mapper複雜類型使用5.資源

<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标榜最大的特點之一:快。那究竟有多快,我們看看官方的測試截圖,由于時間緊張,我沒有進行測試對比,有空試試。

.NET平台開源項目速覽(14)最快的對象映射元件Tiny Mapper1.Tiny Mapper基本介紹2.Tiny Mapper 基本使用3.Tiny Mapper 指定配置使用4.Tiny Mapper複雜類型使用5.資源

    使用TinyMapper非常簡單,它的設計簡單,使用NuGet包,可以快速安裝使用,DLL也才50K大小不到,是以非常輕量級。

    TinyMapper是一個開源項目,是以你可以參與更新和自己修改代碼。 

    首先,通過NuGet下載下傳安裝Tiny Mapper,如下圖:

.NET平台開源項目速覽(14)最快的對象映射元件Tiny Mapper1.Tiny Mapper基本介紹2.Tiny Mapper 基本使用3.Tiny Mapper 指定配置使用4.Tiny Mapper複雜類型使用5.資源

    然後添加引用:

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>/// &lt;summary&gt;最簡單的2個類型之間的映射&lt;/summary&gt;</code>

<code>static</code> <code>void</code> <code>Test1()</code>

<code>    </code><code>TinyMapper.Bind&lt;Person,PersonDto&gt;();</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&lt;PersonDto&gt;(person);</code>

    運作看看結果:

.NET平台開源項目速覽(14)最快的對象映射元件Tiny Mapper1.Tiny Mapper基本介紹2.Tiny Mapper 基本使用3.Tiny Mapper 指定配置使用4.Tiny Mapper複雜類型使用5.資源

有時候對象的字段名稱并不一樣,而且可能要忽略某些字段,這個時候就要使用更加靈活的配置了。

看例子,為了示範,我們特意修改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>/// &lt;summary&gt;使用配置項指定和忽略字段&lt;/summary&gt;</code>

<code>static</code> <code>void</code> <code>Test2()</code>

<code>    </code><code>TinyMapper.Bind&lt;Person, PersonDto&gt;(config =&gt;</code>

<code>        </code><code>config.Ignore(x =&gt; x.Id);</code><code>//忽略ID字段</code>

<code>        </code><code>config.Bind(x =&gt; x.Name, y =&gt; y.UserName);</code><code>//将源類型和目标類型的字段對應綁定起來</code>

<code>        </code><code>config.Bind(x =&gt; x.Age, y =&gt; y.Age);</code><code>//将源類型和目标類型的字段對應綁定起來</code>

<code>    </code><code>});</code>

<code>    </code><code>};</code>

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

.NET平台開源項目速覽(14)最快的對象映射元件Tiny Mapper1.Tiny Mapper基本介紹2.Tiny Mapper 基本使用3.Tiny Mapper 指定配置使用4.Tiny Mapper複雜類型使用5.資源

    有時候對象的類型裡面嵌套着對象,或者數組等等,其實這個時候的使用和上述完全一樣,這裡隻是舉個例子,大家看看而已:

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&lt;String&gt; 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>/// &lt;summary&gt;更複雜對象的映射例子&lt;/summary&gt;</code>

<code>static</code> <code>void</code> <code>Test3()</code>

<code>        </code><code>//将源類型和目标類型的字段對應綁定起來</code>

<code>        </code><code>config.Bind(x =&gt; x.Name, y =&gt; y.UserName);</code>

<code>        </code><code>config.Bind(x =&gt; x.Age, y =&gt; y.Age);</code>

<code>        </code><code>config.Bind(x =&gt; x.Address, y =&gt; y.Address);</code>

<code>        </code><code>config.Bind(x =&gt; x.Emails, y =&gt; 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&lt;</code><code>string</code><code>&gt;() { </code><code>"[email protected]"</code><code>, </code><code>"[email protected]"</code> <code>}</code>

效果如下:

.NET平台開源項目速覽(14)最快的對象映射元件Tiny Mapper1.Tiny Mapper基本介紹2.Tiny Mapper 基本使用3.Tiny Mapper 指定配置使用4.Tiny Mapper複雜類型使用5.資源

本文轉自葉小钗 h資料之巅部落格園部落格,原文連結:http://www.cnblogs.com/asxinyu/p/dotnet_Opensource_project_TinyMapper.html,如需轉載請自行聯系原作者