TinyMapper 使用总结

时间:2022-09-01 23:55:28

初识TinyMapper

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

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 使用总结的更多相关文章

  1. Asp&period;net 面向接口可扩展框架之使用&OpenCurlyDoubleQuote;类型转化基础服务”测试四种Mapper&lpar;AutoMapper、EmitMapper、NLiteMapper及TinyMapper&rpar;

    Asp.net 面向接口可扩展框架的“类型转化基础服务”是我认为除了“核心容器”之外最为重要的组成部分 但是前面博文一出,争议很多,为此我再写一篇类型转化基础服务和各种Mapper结合的例子,顺便对各 ...

  2. &lbrack;C&num;&rsqb; 记-TinyMapper使用

    What is TinyMapper TinyMapper - a tiny and quick object mapper for .Net. The main advantage is perfo ...

  3. EmitMapper 和TinyMapper 两者简单对比

    EmitMapper 和TinyMapper 两者的性能都是很高,相比autoMapper 速度不知道快了多少倍,因为使用的最多EmitMapper,所在业余时间做了一下测试对比. 测试数据:10万条 ...

  4. C&num; TinyMapper

    https://github.com/TinyMapper/TinyMapper 据说性能蛮高的,我没对比测试过. NuGet安装下. 新增三个实体. public class A { public ...

  5. &period;NET平台开源项目速览&lpar;18&rpar;C&num;平台JSON实体类生成器JSON C&num; Class Generator

    去年,我在一篇文章用原始方法解析复杂字符串,json一定要用JsonMapper么?中介绍了简单的JSON解析的问题,那种方法在当时的环境是非常方便的,因为不需要生成实体类,结构很容易解析.但随着业务 ...

  6. &period;NET平台开源项目速览&lpar;14&rpar;最快的对象映射组件Tiny Mapper

    好久没有写文章,工作甚忙,但每日还是关注.NET领域的开源项目.五一休息,放松了一下之后,今天就给大家介绍一个轻量级的对象映射工具Tiny Mapper:号称是.NET平台最快的对象映射组件.那就一起 ...

  7. DotNet 资源大全中文版(Awesome最新版)

    Awesome系列的.Net资源整理.awesome-dotnet是由quozd发起和维护.内容包括:编译器.压缩.应用框架.应用模板.加密.数据库.反编译.IDE.日志.风格指南等. 算法与数据结构 ...

  8. Tiny Mapper

    今天看到一个对象映射工具-TinyMapper 1.介绍 Tiny Mapper是一个.net平台的开源的对象映射组件,其它的对象映射组件比如AutoMapper有兴趣的可以去看,Tiny Mappe ...

  9. ABP理论学习之N层架构

    返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析,这些找不到demo的同学,很可 ...

随机推荐

  1. Linux系统时间设置(转载)

    Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟.系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟, ...

  2. JavaScript之引用类型介绍

    引用类型的值(对象)是应用类型的一个实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,用于将数据和功能组织在一起.他们通常也被成为JavaScript中的类,但这种称 ...

  3. 同时运行ecstore1&period;2与ecstore2&period;0的解决方案

    解决方法: php.ini中 zend_loader.license_path指向一个目录,该目录下同时包含两个developer.zl文件,一个是1.2,一个是2.0的. 为了避免俩develope ...

  4. Java编程思想总结笔记The first chapter

    总觉得书中太啰嗦,看完总结后方便日后回忆,本想偷懒网上找别人的总结,无奈找不到好的,只好自食其力,尽量总结得最好. 第一章  对象导论 看到对象导论觉得这本书 目录: 1.1 抽象过程1.2 每个对象 ...

  5. &lbrack;拓扑排序&rsqb;Ordering Tasks UVA - 10305

    拓扑排序模版题型: John has n tasks to do.Unfortunately, the tasks are not independent and the execution of o ...

  6. 7、JPA-映射-双向一对多

    一个用户对应多个订单,多个订单对应一个用户,不管查哪一边都可以得到另一边的信息 实体类 Customer package com.jpa.yingshe; import javax.persisten ...

  7. 数字对——RMQ&plus;二分答案

    题目描述 小H是个善于思考的学生,现在她又在思考一个有关序列的问题. 她的面前浮现出一个长度为n的序列{ai},她想找出一段区间[L, R](1 <= L <= R <= n). 这 ...

  8. October 25th&comma; 2017 Week 43rd Wednesday

    Perseverance is not a long race; it is many short races one after another. 坚持不是一个长跑,她是很多一个接一个的短跑. To ...

  9. CUDA C Programming Guide 在线教程学习笔记 Part 4

    ▶ 图形互操作性,OpenGL 与 Direct3D 相关.(没学过,等待填坑) ▶ 版本号与计算能力 ● 计算能力(Compute Capability)表征了硬件规格,CUDA版本号表征了驱动接口 ...

  10. Unity游戏开发之C&num;快速入门

    C#是微软团队在开发.NET框架时开发的,它的构想接近于C.C++,也和JAVA十分相似,有许多强大的编程功能. 个人感受是C#吸收了众多编程语言的优点,从中可以看到C.C++.Java.Javasc ...