TinyMapper 使用总结

初识TinyMapper

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

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

安装TinyMapper

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

TinyMapper映射

1. 绑定映射关系.net

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类型。blog

简单映射

建立两个映射对象:接口

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

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

[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); }

集合映射

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

[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>.string

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/

相关文章
相关标签/搜索