C#的二进制序列化组件MessagePack介绍
1.C# 读取 EXCEL 文件的三种经典方法2016-04-082.C# 进阶系列——WebApi 接口传参不再困惑:传参详解(转载)2016-04-223.C# 将对象序列化成 JSON 字符串2017-03-014.ASP.NET C# List 分页2017-02-065.c# 关于路径的总结 (转)2017-01-226.每一个 C# 开发者必须知道的 13 件事情2016-08-267.C# 调用 API 弹出打印机属性对话框2020-01-208.C# 利用 SQLDMO 备份与还原数据库2020-01-19
9.C# 的二进制序列化组件 MessagePack 介绍2019-11-29
10.C# 开发模式——单例模式2017-07-2611.Linq 用法笔记2017-06-2312.整理一些提高 C# 编程性能的技巧2017-06-1713.C# 常见几道面试题2017-06-0114.NetFramework 各个版本的特性笔记2017-05-2815.C# 之 app.config、exe.config 和 vshost.exe.config 作用区别2019-08-2016.C# Stream 和 byte[] 之间的转换2019-02-1917.C# 获取电脑 IP、MAC 地址示例代码2019-02-1818.C# 通过 SMTP 发送邮件代码示例2019-02-1719.C# 实现简体繁体转换代码示例2019-02-1620.C# 抓取网页 HTML 内容2019-02-0821.C# 大数据插入代码2019-02-0722.C# 操作 HttpClient 工具类库2019-02-0623.C# 操作 IIS 类库2019-02-0324.C# 判断某天是否是周末或者节假日示例2019-01-2625.C# 一些实用的函数2018-12-0826.MVC 实现实现文件流打包成压缩包2018-12-0627.C# 实现 SQLServer 数据库备份示例2018-11-2828.C# JSON 格式数据用法2018-11-2729.C# FTP 操作类库2018-11-2630.C# 中的几个实用的代码2018-09-2831.C# 技巧: 常用的 lambda 表达式整理2022-11-0132.后端:C# 操作 Mongodb 用法笔记2022-09-2733.C#:Winfrom 实现 DataGridView 自定义分页2022-08-2334.C# 实战:基于 ItextSharp 技术标签生成小工具2022-08-1035.【收集】C# 一些基础的面试题2018-09-0636.C# 文档转换为 pdf 格式帮助类2018-08-3137.关于 mysql-connector-net 在 C# 中的用法2018-08-2938.C# 中 DateTime.Ticks 属性及 Unix 时间戳转换2018-08-1839.C# 中读写 INI 配置文件2018-07-0440.C# 实现 HTTP 不同方法的请求示例2018-06-2641.【实用】C# 测试 web 服务是否可用2018-06-1542.C# 一些实用的工具2018-05-1243.C# 操作 IIS 服务器 Demo2018-04-1844.C# 比较 dynamic 和 Dictionary 性能2018-03-2145.C# 中 AssemblyInfo.cs 文件详解2018-03-1846.C# 中 AssemblyInfo.cs 文件详解2018-03-1847.c# 中常用集合类和集合接口之集合类系列2017-12-2648.C# 程序集相关的概念2017-09-2449.如何通俗地解释 C、C++、C#、Java、JavaScript、HTML、Python 的用处2017-09-2450.C# 编程规范整理2017-08-2751.NetFramework 各个版本的特性笔记2017-06-0252.【原创】SQlServer 数据库生成简单的说明文档小工具 (附源码)2017-04-01 <div id="js_content">
<p><img src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy82T3hxU3FXQnFzTHhPQmFQbGZXNlVhR1RPY1VDeUUxYm1aR3R6QXhLYzJnM3A3b2w4eDlQWUppY2VMbUtDWDlHTDNKUkxrUk1sdHhBWHFQSms1WHZpYkVRLzY0MD93eF9mbXQ9anBlZw?x-oss-process=image/format,png" width="800"></p><p>C#的序列化有多种,我一般喜欢用第三方组件,一个公共组件要拿出来用,而且支持很多语言,甚至以此谋生,肯定有其优势。</p><p>有或者说存在必然有其合理性,经过几年开发,我更加喜欢第三方的东西,类似序列化的东西。</p><p> 开篇总是牢骚,大家要习惯哈</p><p>最近在写一个小组件,组合一个框架,先分别介绍里面用到的东西,恰好一个个说说。</p><p>本篇就叫序列化篇吧,没有什么多说的,直接代码上了。</p><p>已经测试了,没有什么多说的。</p><p>里面有个init方法,因为我的类是静态的,所以每个都调用一次初始化。</p><p> /// 序列化二进制<br> /// </summary><br> /// <typeparam name="T"></typeparam><br> /// <param name="obj"></param><br> /// <returns></returns><br> public static byte[] Serializer<T>(T obj)<br> {<br> Init();<br> return MessagePackSerializer.Serialize<T>(obj);<br> }</p><p> /// <summary><br> /// 反序列化二进制<br> /// </summary><br> /// <typeparam name="T"></typeparam><br> /// <param name="bytes"></param><br> /// <returns></returns><br> public static T Deserialize<T>(byte[] bytes)<br> {<br> Init();<br> return MessagePackSerializer.Deserialize<T>(bytes);<br> }</p><p> /// <summary><br> /// byte[]转json字符串<br> /// </summary><br> /// <param name="json"></param><br> /// <returns></returns><br> public static string JSONBytesToString(byte[]json)<br> {<br> Init();<br> return MessagePackSerializer.ToJson(json);<br> }<br> <br> /// <summary><br> /// json字符串转byte[]<br> /// </summary><br> /// <param name="json"></param><br> /// <returns></returns><br> public static byte[] JSONStringToBytes(string json)<br> {<br> Init();<br> return MessagePackSerializer.FromJson(json);<br> }</p><p> /// <summary><br> /// 对象转json字符串<br> /// </summary><br> /// <typeparam name="T"></typeparam><br> /// <param name="obj"></param><br> /// <returns></returns><br> public static string JSONObjectToString<T>(T obj)<br> {<br> return MessagePackSerializer.ToJson<T>(obj);<br> }</p><p> /// <summary><br> /// 对象直接转json的byte[]<br> /// </summary><br> /// <typeparam name="T"></typeparam><br> /// <param name="obj"></param><br> /// <returns></returns><br> public static byte[] JSONObjectToBytes<T>(T obj )<br> {<br> Init();<br> return JSONStringToBytes(JSONObjectToString<T>(obj));<br> }</p><p> /// <summary><br> /// json字符串转对象,序列化<br> /// </summary><br> /// <typeparam name="T"></typeparam><br> /// <param name="json"></param><br> /// <returns></returns><br> public static T JSONStringToObject<T>(string json)<br> {<br> Init();<br> return Deserialize<T>(JSONStringToBytes(json));<br> }</p><p> </p><p>后说:</p><p>MessagePack中也有JSON,所以一并用了,谁叫fastjson只有java版本呢。</p><p>MessagePack有2种使用方式,一直是特性,需要在序列化的类上添加MessagePackObject,这叫做限制类扩展使用</p><p>例如:</p><p>[MessagePackObject]</p><p>public Class Person</p><p>{</p><p>}</p><p>另外一种就是非限制的,就是我使用的方式,封装一个方法,不使用特性,但是这种就需要初始化了,采用默认的实例。</p><p>也就有了我的初始化方法Init.就像下面这样。</p><p> private static volatile bool isInit=true;<br> private static void Init()<br> {<br> if (isInit)<br> {<br> MessagePackSerializer.SetDefaultResolver(MessagePack.Resolvers.ContractlessStandardResolver.Instance);<br> isInit = false;<br> }<br> }</p><p>MessagePack支持.Net 各类型平台,.Net Core,.Net FramWork,.Net Standard.</p><p>最最后说一下,mongdb有个东西叫BSON,这也是一种格式,也可以作为通信格式序列化。</p><p>mongdb的BSON格式也支持.Net各类型平台了。</p><p>总体来说,c#的序列化有XML,二进制,JSON,BSON</p>
</div>