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介绍的更多相关文章

  1. 快速序列化组件MessagePack介绍

    简介 MessagePack for C#(MessagePack-CSharp)是用于C#的极速MessagePack序列化程序,比MsgPack-Cli快10倍,与其他所有C#序列化程序相比,具有 ...

  2. 序列化 反序列化 MessagePack for C#

    阅读目录 快速序列化组件MessagePack介绍 简介 使用 快速开始 分析器 内置的支持类型 对象序列化 DataContract兼容性 序列化不可变对象(序列化构造器) 序列化回调 Union ...

  3. 一种高效的序列化方式——MessagePack

    最近在弄一些数据分析方面的内容,发现很多时候数据瓶颈在模块之间的数据序列化和反序列化上了,原来项目中用的是Json,找了一圈发现Json.net在Json序列化库中已经是性能的佼佼者了,便准备从序列化 ...

  4. DRF框架(二)——解析模块(parsers)、异常模块(exception_handler)、响应模块(Response)、三大序列化组件介绍、Serializer组件(序列化与反序列化使用)

    解析模块 为什么要配置解析模块 1)drf给我们提供了多种解析数据包方式的解析类 form-data/urlencoded/json 2)我们可以通过配置来控制前台提交的哪些格式的数据后台在解析,哪些 ...

  5. 线程安全使用(四) [.NET] 简单接入微信公众号开发:实现自动回复 [C#]C#中字符串的操作 自行实现比dotcore/dotnet更方便更高性能的对象二进制序列化 自已动手做高性能消息队列 自行实现高性能MVC WebAPI 面试题随笔 字符串反转

    线程安全使用(四)   这是时隔多年第四篇,主要是因为身在东软受内网限制,好多文章就只好发到东软内部网站,懒的发到外面,现在一点点把在东软写的文章给转移出来. 这里主要讲解下CancellationT ...

  6. 开源!一款功能强大的高性能二进制序列化器Bssom.Net

    好久没更新博客了,我开源了一款高性能的二进制序列化器Bssom.Net和新颖的二进制协议Bssom,欢迎大家Star,欢迎参与项目贡献! Net开源技术交流群 976304396,禁止水,只能讨论技术 ...

  7. 新型序列化类库MessagePack,比JSON更快、更小的格式

    MessagePack is an efficient binary serialization format. It lets you exchange data among multiple la ...

  8. rest-framework之APIView 序列化组件

    rest-framework之APIView 一 安装djangorestframework 方式一:pip3 install djangorestframework 方式二:pycharm图形化界面 ...

  9. .NET 二进制序列化器,SOAP序列化器,XML序列化器

    这里就不说JSON序列化了,只介绍三种:二进制序列化器,SOAP序列化器,XML序列化器 直接上代码: /// <summary> /// 二进制序列化器. /// 最节省流量,压缩程度最 ...

随机推荐

  1. linq(查询)

    1.改变数据库某一字段的属性 db.tableName.ToList().ForEach(x => x.State = false); 2.排序 db.tableName..toList().O ...

  2. html-标题标签、水平线标签和特殊字符

    标题标签  <h1></h1> <h2></h2> ...... <h6></h6> 从h1到h6,大小是依次变小,同时会自动换 ...

  3. Office 365系列(三) -Office 365 Pro plus 安装

    这一篇博客主要是说Office 365 Pro plus安装. 1. 当登陆到Office 365以后,点击右边链接“下载软件” 2. 安装最新Office 软件 3. 采用点对点安装,当安装成功以后 ...

  4. 转:ArcInfo数据格式介绍

    ArcInfo常用以下格式的数据:shp.Coverage..Raster CAD和Geodatabase.各种数据的组织形式不一样,其中shp.Coverage.Raster.CAD为文件类型,Ge ...

  5. JSP实现用户登录样例

    业务描述 用户在login.jsp页面输入用户名密码登录: 如果用户名为xingoo,密码为123,则跳转到成功界面login_success.jsp,并显示用户登录的名字: 如果用户名密码错误,则跳 ...

  6. 3.GlusterFS 企业分布式存储的搭建

    3.1 硬件要求 一般选择 2U 机型,磁盘 SATA 盘 4TB,如果 IO 要求比较高,可以采购 SSD 固态硬盘.为了充分保证系统的稳定性和性能,要求所有 glusterfs 服务器硬件配置尽量 ...

  7. leetcode第一刷_Plus One

    这种相似大整数的处理的问题还是比較常见的,这道题应该是很easy的版本号. 题目的要求是这种,输入的vector靠前的位置是数字的高位.因此应该先求出长度.然后从后面往前算.维护一个变量保存进位.这我 ...

  8. 【[TJOI2017]城市】

    题目 好像\(noip\)之前做某雅礼的题的时候看到过这道题的数据范围增强版 当时那道题数据范围是\(3e5\)感觉神仙的一批 这道题数据范围\(5e3\)那岂不是可以\(O(n^2)\)水过 有一点 ...

  9. 【[ZJOI2014]力】

    题目 好神仙啊 \[F_{j}=\sum_{i<j}\frac{q_iq_j}{(i-j)^2}-\sum_{j<i}\frac{q_iq_j}{(i-j)^2}\] 求\(\frac{F ...

  10. 【转】Android手机分辨率基础知识(DPI,DIP计算)

    1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托罗拉milestone手机是3.7英寸 A ...