.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,如下圖:

 

    然后添加引用:

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; }
	//注意這里的字段名稱:UserName
	public 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM