[聚合文章] TinyMapper 使用总结

.Net 2018-01-14 17 阅读

初识TinyMapper

TinyMapper是开源的对象映射框架,功能和AutoMapper一样。官网介绍,TinyMapper映射效率很高,下图是官方给的比较结果:

TinyMapper使用简单,只有Bind,Mapper两个操作;而且支持的配置也很简单(很有限)。下面就让我们来进一步认识下TinyMapper。

安装TinyMapper

通过Nuget安装TinyMapper,本次使用版本为2.0.8。

TinyMapper映射

1. 绑定映射关系

public static void Bind<TSource, TTarget>();public static void Bind<TSource, TTarget>(Action<IBindingConfig<TSource, TTarget>> config);

2. 执行映射,获取映射结果

public static TTarget Map<TSource, TTarget>(TSource source, TTarget target = default(TTarget));public static TTarget Map<TTarget>(object source);

注意:TinyMapper的映射对象必须是Public类型。

简单映射

创建两个映射对象:

public class Product{	public Guid Id { get; set; }	public string Name { get; set; }	public decimal Price { get; set; }}public class ProductDTO{	public Guid Id { get; set; }	public string Name { get; set; }	public decimal Price { get; set; }}

绑定映射关系并执行映射:

[TestMethod]public void TestSimple(){	var product = new Product()	{		Id = Guid.NewGuid(),		Name = "Product" + DateTime.Now.Ticks,		Price = 12	};	//1. 创建映射关系	TinyMapper.Bind<Product, ProductDTO>();
//TinyMapper.Bind<Product, ProductDTO>(); //直接建立对象绑定关系也是可以的 //2. 执行映射 var productDto = TinyMapper.Map<ProductDTO>(product); Assert.IsNotNull(productDto); Assert.AreEqual(12, productDto.Price); Assert.IsNotNull(productDto.Name);}

集合映射

仍然使用上面的映射对象,集合验证方式如下:

[TestMethod]public void TestList(){	var products = new List<Product>()	{		new Product()		{			Id = Guid.NewGuid(),			Name = "Product" + DateTime.Now.Ticks,			Price = 5		},		new Product()		{			Id = Guid.NewGuid(),			Name = "Product" + DateTime.Now.Ticks,			Price = 10		}	};	//1. 创建映射关系	TinyMapper.Bind<List<Product>, List<ProductDTO>>();	//2. 执行映射	var productDtos = TinyMapper.Map<List<Product>>(products);	Assert.IsNotNull(productDtos);	Assert.AreEqual(2, productDtos.Count);}

  

执行映射转换时,TinyMapper不支持接口类型:IList<T>, ICollection<T>, IEnumerable<T>.

TinyMapper.Map<ICollection<Product>>(products); //执行时会抛出异常

映射配置

TinyMapper支持简单的映射配置:

指定字段映射

public class Product{	public Guid Id { get; set; }	public string Name { get; set; }	public decimal Price { get; set; }}public class ProductDTO{	public string Id { get; set; }	public string Name { get; set; }	public decimal Money { get; set; }}[TestMethod]public void TestMapperConfig(){	var product = new Product()	{		Id = Guid.NewGuid(),		Name = "Product" + DateTime.Now.Ticks,		Price = 12	};	//1. 创建映射关系	TinyMapper.Bind<Product, ProductDTO>(cfg =>	{		cfg.Bind(src => src.Price, dest => dest.Money); //指定字段映射	});	//2. 执行映射	var productDto = TinyMapper.Map<ProductDTO>(product);	Assert.IsNotNull(productDto);	Assert.AreEqual(12, productDto.Money);}

映射时不管某些字段

TinyMapper.Bind<Product, ProductDTO>(cfg =>{	cfg.Ignore(src => src.Price); //映射时不管某些字段});

注意:TinyMapper默认会根据字段名称进行映射,而不管字段的类型。也就是说,如果源对象字段名称与目标对象字段名称一致,但是类型不一致且不能进行强制转换时,会抛出异常。

TinyMapper简单封装

public class TinyMapperUtil{	/// <summary>	/// 创建映射关系	/// </summary>	/// <typeparam name="TSource"></typeparam>	/// <typeparam name="TDestination"></typeparam>	public static void Bind<TSource, TDestination>()	{		TinyMapper.Bind<TSource, TDestination>();	}	/// <summary>	/// 映射对象	/// </summary>	/// <typeparam name="TDestination"></typeparam>	/// <param name="source"></param>	/// <returns></returns>	public static TDestination Map<TDestination>(object source)	{		if (source == null)		{			return default(TDestination);		}		else		{			return TinyMapper.Map<TDestination>(source);		}	}}

总结

以上基本是TinyMapper提供的所有特性及操作。相比AutoMapper,功能很有限,不支持扁平映射,也不支持接口集合转换等。但使用起来还是很简单的,仍然可以考虑在项目中使用。

相关资料可以参考官网介绍:http://tinymapper.net/

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。