赞
踩
提到映射大家可能会想到AutoMapper,在 .NET 领域的开发者中有非常高的知名度和使用率。而今天要提的是另外一款高性能对象映射框架:Mapster——它轻巧便捷,功能也非常强大,关键是性能很高——有可能是.NET领域性能最好的。
与 AutoMapper 相比,Mapster 在速度和内存占用方面表现更加优秀 ,下面是官方给出的稍早版本 6.0 的性能对比表:
从表中我们可以看出,即使在不使用高性能组件的情况下它的性能都可以获得4倍于AutoMapper,却只需要1/3左右的内存占用,而在使用Roslyn Compiler、FEC (FastExpressionCompiler)、Code generation等组件后可以再进一步提升2-3倍的性能。Code generation 方式几乎就是这个事儿极限了。你还有更快的手段吗?
在包控制管理器安装Mapster
对象映射最多的场景就是两个实体定义的属性名是重叠对应的,那么此时的基本用法就非常简单:
using Mapster;
T需要映射成的实体 映射后= 原有实体.Adapt<T需要映射成的实体>();
自定义映射关系
public class bb{
public string userName{get;set;}
public string role{get;set;}
}
public class aa{
public string userName{get;set;}
public string[] role{get;set;}
}
bb b=new bb{userName="admin",role="1,2,3"}
//这样我们就可以把bb的参数进行处理 映射成aa想要的类型
TypeAdapterConfig<bb, aa>.NewConfig()
.Map(dest => dest.role, src => src.role.Split(',', StringSplitOptions.None))
.Map(dest => dest.name, src => src.name.ToLower());
//相反也可以将bb想要的类型进行处理
TypeAdapterConfig<aa, bb>.NewConfig().Map(m=>m.role,b=>string.Join(',',b.role));
aa outPut = bb.Adapt<aa>();
其它更多骚操作
https://github.com/MapsterMapper/Mapster ,如果说英文阅读有点困难,可以到 https://github.com/rivenfx/Mapster-docs 看热心网友做到中文翻译版。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。