• TinyMapper 使用总结


    初识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/

  • 相关阅读:
    [TJOI2018]教科书般的亵渎
    luogu P4781 【模板】拉格朗日插值
    [SDOI2010]捉迷藏
    [CQOI2016]K远点对
    BZOJ4066 简单题
    [国家集训队]JZPFAR
    Understanding User and Kernel Mode
    Linux下如何查看系统启动时间和运行时间以及安装时间
    CentOS Linux搭建独立SVN Server全套流程(修改svn仓库地址、服务启动等)
    linux下获取占用CPU资源最多的10个进程,可以使用如下命令组合:
  • 原文地址:https://www.cnblogs.com/arvinzhang/p/8282922.html
Copyright © 2020-2023  润新知