c#的二进制序列化组件MessagePack介绍
c#的序列化有多种,我一般喜欢用第三方组件,一个公共组件要拿出来用,而且支持很多语言,甚至以此谋生,肯定有其优势。
有或者说存在必然有其合理性,经过几年开发,我更加喜欢第三方的东西,类似序列化的东西。
开篇总是牢骚,大家要习惯哈
最近在写一个小组件,组合一个框架,先分别介绍里面用到的东西,恰好一个个说说。
本篇就叫序列化篇吧,没有什么多说的,直接代码上了。
已经测试了,没有什么多说的。
里面有个init方法,因为我的类是静态的,所以每个都调用一次初始化。
/// 序列化二进制
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] Serializer<T>(T obj)
{
Init();
return MessagePackSerializer.Serialize<T>(obj);
}
/// <summary>
/// 反序列化二进制
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="bytes"></param>
/// <returns></returns>
public static T Deserialize<T>(byte[] bytes)
{
Init();
return MessagePackSerializer.Deserialize<T>(bytes);
}
/// <summary>
/// byte[]转json字符串
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static string JSONBytesToString(byte[]json)
{
Init();
return MessagePackSerializer.ToJson(json);
}
/// <summary>
/// json字符串转byte[]
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static byte[] JSONStringToBytes(string json)
{
Init();
return MessagePackSerializer.FromJson(json);
}
/// <summary>
/// 对象转json字符串
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string JSONObjectToString<T>(T obj)
{
return MessagePackSerializer.ToJson<T>(obj);
}
/// <summary>
/// 对象直接转json的byte[]
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static byte[] JSONObjectToBytes<T>(T obj )
{
Init();
return JSONStringToBytes(JSONObjectToString<T>(obj));
}
/// <summary>
/// json字符串转对象,序列化
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <returns></returns>
public static T JSONStringToObject<T>(string json)
{
Init();
return Deserialize<T>(JSONStringToBytes(json));
}
后说:
MessagePack中也有JSON,所以一并用了,谁叫fastjson只有java版本呢。
MessagePack有2种使用方式,一直是特性,需要在序列化的类上添加MessagePackObject,这叫做限制类扩展使用
例如:
[MessagePackObject]
public Class Person
{
}
另外一种就是非限制的,就是我使用的方式,封装一个方法,不使用特性,但是这种就需要初始化了,采用默认的实例。
也就有了我的初始化方法Init.就像下面这样。
private static volatile bool isInit=true;
private static void Init()
{
if (isInit)
{
MessagePackSerializer.SetDefaultResolver(MessagePack.Resolvers.ContractlessStandardResolver.Instance);
isInit = false;
}
}
MessagePack支持.Net 各类型平台,.Net Core,.Net FramWork,.Net Standard.
最最后说一下,mongdb有个东西叫BSON,这也是一种格式,也可以作为通信格式序列化。
mongdb的BSON格式也支持.Net各类型平台了。
总体来说,c#的序列化有XML,二进制,JSON,BSON
特别说明,这里介绍的MessagePack不是 MsgPack.Cli
MsgPack.Cli的官网是https://msgpack.org/,github:https://github.com/msgpack/msgpack-cli
而这里介绍的MessagePack没有官网,只有github:https://github.com/neuecc/MessagePack-CSharp
虽然2个很像,但是真不是同一个。
c#的二进制序列化组件MessagePack介绍的更多相关文章
- 快速序列化组件MessagePack介绍
简介 MessagePack for C#(MessagePack-CSharp)是用于C#的极速MessagePack序列化程序,比MsgPack-Cli快10倍,与其他所有C#序列化程序相比,具有 ...
- 序列化 反序列化 MessagePack for C#
阅读目录 快速序列化组件MessagePack介绍 简介 使用 快速开始 分析器 内置的支持类型 对象序列化 DataContract兼容性 序列化不可变对象(序列化构造器) 序列化回调 Union ...
- 一种高效的序列化方式——MessagePack
最近在弄一些数据分析方面的内容,发现很多时候数据瓶颈在模块之间的数据序列化和反序列化上了,原来项目中用的是Json,找了一圈发现Json.net在Json序列化库中已经是性能的佼佼者了,便准备从序列化 ...
- DRF框架(二)——解析模块(parsers)、异常模块(exception_handler)、响应模块(Response)、三大序列化组件介绍、Serializer组件(序列化与反序列化使用)
解析模块 为什么要配置解析模块 1)drf给我们提供了多种解析数据包方式的解析类 form-data/urlencoded/json 2)我们可以通过配置来控制前台提交的哪些格式的数据后台在解析,哪些 ...
- 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转
线程安全使用(四) 这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...
- 开源!一款功能强大的高性能二进制序列化器Bssom.Net
好久没更新博客了,我开源了一款高性能的二进制序列化器Bssom.Net和新颖的二进制协议Bssom,欢迎大家Star,欢迎参与项目贡献! Net开源技术交流群 976304396,禁止水,只能讨论技术 ...
- 新型序列化类库MessagePack,比JSON更快、更小的格式
MessagePack is an efficient binary serialization format. It lets you exchange data among multiple la ...
- rest-framework之APIView 序列化组件
rest-framework之APIView 一 安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面 ...
- .NET 二进制序列化器,SOAP序列化器,XML序列化器
这里就不说JSON序列化了,只介绍三种:二进制序列化器,SOAP序列化器,XML序列化器 直接上代码: /// <summary> /// 二进制序列化器. /// 最节省流量,压缩程度最 ...
随机推荐
- centos-7.2 node.js免编译安装
cd /usr/local/ wget https://npm.taobao.org/mirrors/node/v8.9.3/node-v8.9.3-linux-x64.tar.gz tar -zxv ...
- python数据类型(集合)
一.集合概念 集合是一个数学概念:由一个或多个确定的元素所构成的整体叫做集合. 集合中的元素三个特征: 确定性(元素必须可hash) 互异性(去重)——将一个列表变为集合,就自动去重了 无序性(集合中 ...
- Angular选项卡
前几天我发的东西,可能对于没有基础的人很难理解,那么今天,咱们就发点简单点的东西吧! Angular显示隐藏,选项卡! 还是那句话,话不多说,上代码: <!DOCTYPE html> &l ...
- css 简单梯形
通过css2D变形我们可以轻松得到平行四边形,那么通过此技巧可以得到梯形吗? no! 不过我们可以通过3D旋转得到类似这样的效果: transform:perspective(0.5em) rota ...
- 【Eclipse】在Eclipse上安装Spket
转自:https://www.cnblogs.com/HDK2016/p/7099383.html 1,Spket是什么? Spket是一种编辑javaScript和XML代码的工具,可以用他自己的 ...
- ExecutorService的invokeAny方法
一.此方法获得最先完成任务的结果,即Callable<T>接口中的call的返回值,在获得结果时,会中断其他正在执行的任务 示例代码: import java.util.ArrayList ...
- db2的count()函数和sum()函数的用法
一.count()函数可以使用参数,例如count(*)和count(列名) count(*)用来计算在指定条件下,满足条件的行数,例如: select count(*) from tablename ...
- HTTP协议安全头部X-Content-Type-Options引入的问题
前段时间测试MM反馈了一个问题,在富文本编辑器里上传的图片无法正常呈现.因为Jackie在本机的环境上没有观察类似的现象,而恰好那天测试环境的某个重要配项被改错了,于是Jackie想当然的归类为配置项 ...
- 成功解决:FutureWarning: Conversion of the second argument of issubdtype from `float` to `np.floating` is
问题原因: 包内出错,是h5py包 解决思路: 执行如下操作: pip -- install h5py==2.8.0rc1 注意:如果执行pip install h5py==2.8.0rc1 成功话, ...
- React学习笔记 - 组件&Props
React Learn Note 4 React学习笔记(四) 标签(空格分隔): React JavaScript 三.组件&Props 组件可以将UI切分成一些独立的.可复用的部件,这样你 ...