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/
TinyMapper 使用总结的更多相关文章
- Asp.net 面向接口可扩展框架之使用“类型转化基础服务”测试四种Mapper(AutoMapper、EmitMapper、NLiteMapper及TinyMapper)
Asp.net 面向接口可扩展框架的“类型转化基础服务”是我认为除了“核心容器”之外最为重要的组成部分 但是前面博文一出,争议很多,为此我再写一篇类型转化基础服务和各种Mapper结合的例子,顺便对各 ...
- [C#] 记-TinyMapper使用
What is TinyMapper TinyMapper - a tiny and quick object mapper for .Net. The main advantage is perfo ...
- EmitMapper 和TinyMapper 两者简单对比
EmitMapper 和TinyMapper 两者的性能都是很高,相比autoMapper 速度不知道快了多少倍,因为使用的最多EmitMapper,所在业余时间做了一下测试对比. 测试数据:10万条 ...
- C# TinyMapper
https://github.com/TinyMapper/TinyMapper 据说性能蛮高的,我没对比测试过. NuGet安装下. 新增三个实体. public class A { public ...
- .NET平台开源项目速览(18)C#平台JSON实体类生成器JSON C# Class Generator
去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...
- .NET平台开源项目速览(14)最快的对象映射组件Tiny Mapper
好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...
- DotNet 资源大全中文版(Awesome最新版)
Awesome系列的.Net资源整理.awesome-dotnet是由quozd发起和维护.内容包括:编译器.压缩.应用框架.应用模板.加密.数据库.反编译.IDE.日志.风格指南等. 算法与数据结构 ...
- Tiny Mapper
今天看到一个对象映射工具-TinyMapper 1.介绍 Tiny Mapper是一个.net平台的开源的对象映射组件,其它的对象映射组件比如AutoMapper有兴趣的可以去看,Tiny Mappe ...
- ABP理论学习之N层架构
返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析,这些找不到demo的同学,很可 ...
随机推荐
- 开发wordpress主题
查看我的wordpress站点 第一步:下载wordpress安装包 官网下载==> 第二步:本地安装开发环境 官网给出的环境要求: 可以选择安装wamp/xampp集成PHP开发环境,安装很简 ...
- 利用reverse索引优化like语句的方法详解
在有一些情况下,开发同学经常使用like去实现一些业务需求,当使用like时,我们都知道使用like 前%(like '%111')这种情况是无法使用索引的,那么如何优化此类的SQL呢,下面是一个案例 ...
- github上搜索资源
1.进入官网 点击Explore 2.点击Trending 3.资源都在这上面,可以根据语言分类 4.搜索链接 https://github.com/trending
- Web前端开发好学吗?谈谈一位学姐的前端工程师之路
我的第一篇博客....... 我是一名工科女,因高考失利与理想的院校擦肩而过,从而选择了机电专业.毕业后找工作时才发现机电专业的工作并不太适合我.我的父母也支持我转专业求职,但这个过程有时会让我迷茫. ...
- windows server 2008 R2服务器安装IIS并添加网站
一.连接远程计算机 1.因为我的电脑是win7系统,故这里以win7为例,其他windows系统大同小异,首先点开开始菜单栏,在windows附件下找到远程桌面连接 或者采用通用的方法,利用快捷键wi ...
- 开发过程遇到的bug
1.transition和display的冲突: 解决方法:1)使用visibility:2)使用js的setTimeout使动画延迟:3)可以改变高度: 2.form表单提交和js中的提交冲突 解决 ...
- sort 命令详解
sort 作用:将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序 参数: -b 忽略每行前面开始出的空格字符. -c 检查文件是否已经按照顺序排序. -d 排序时,处理英文字 ...
- 2017双11海量数据下EagleEye的使命和挑战
摘要: EagleEye作为阿里集团老牌的链路跟踪系统,其自身业务虽不在交易链路上,但却监控着全集团的链路状态,特别是在中间件的远程调用上,覆盖了集团绝大部分的场景,在问题排查和定位上发挥着巨大的作用 ...
- Hello TensorFlow 二 (GPU)
官方说明:https://www.tensorflow.org/install/ 环境: 操作系统 :Windows 10 家庭中文版 处理器 : Intel(R) Core(TM) i7-7700 ...
- Windows,Mac与Linux哪个更适合开发者?
以前写的,怕引来口水战,干脆不发.这段时间面试了十来人,用Mac的开发水平明显高于Windows的,挺多感想的,于是改改发了吧. Windows: 对普通用户而言体验最友好,对开发者 ...