c#的二进制序列化组件MessagePack介绍

2023-10-27

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个很像,但是真不是同一个。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

c#的二进制序列化组件MessagePack介绍 的相关文章

随机推荐

  • 截图 识别指定位置文字

    def tu browser get screenshot as file 1 png img Image open 1 png bo 图片左边到元素左边的距离 图片上面到元素上边的距离 图片左边到元素最右边的距离 图片上面到元素最下边的距
  • Keras—embedding嵌入层的使用

    最近在工作中进行了NLP的内容 使用的还是Keras中embedding的词嵌入来做的 Keras中embedding层做一下介绍 中文文档地址 https keras io zh layers embeddings 参数如下 其中参数重点
  • Flask 物联网局部应用情景

    实践 Raspberry Pi 托管 Flask 网络服务器控制设备 云托管 Flask 和 SQLite 网络服务器使用Web API 处理 ESP8266 数据 Raspberry Pi 托管 Flask 网络服务器使用SQLite存储
  • ChatGPT有哪些作用?

    ChatGPT有哪些作用 介绍 在当今信息技术飞速发展的时代 自然语言处理和人工智能已经成为许多领域的关键技术 ChatGPT是一种先进的语言生成模型 通过人工智能技术为用户提供了许多有用的功能和应用 本文将探讨ChatGPT的作用及其在不
  • 【ASP.NET Core】MVC模型绑定:自定义InputFormatter读取CSV内容

    Python微信订餐小程序课程视频 https edu csdn net course detail 36074 Python实战量化交易理财系统 https edu csdn net course detail 35475 在上一篇文章中
  • 【浅学Java】Servlet详解

    Servlet详解 1 什么是Servlet 2 创建一个Servlet程序 1 创建项目 Maven 2 引入依赖 3 创建一些新目录 4 编写代码 5 打包 6 部署 7 验证程序 3 简化创建Servlet的步骤 1 安装plugin
  • .NET Desktop程序员:互联网大环境下软件生产力的创造者

    目录 引言 桌面软件如何适配今天的互联网 让 NET桌面软件工程拥有互联网基因 WebRuntime是什么 具体案例 让应用适配不同的应用场景 基于应用的Web页面 Cloud WinForm 强大的Web生产力 总结 引言 对每个 NET
  • 征服数据宇宙,新华三存储护卫队早有准备?

    999 往期 精 选
  • 【C++】STL—— unordered_map的介绍和使用、 unordered_map的构造函数和迭代器、 unordered_map的增删查改函数

    文章目录 1 unordered map的介绍 2 unordered map的使用 2 1unordered map的构造函数 2 2unordered map的迭代器 2 3unordered map的容量和访问函数 2 4unorde
  • 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

    程序分析 用情况语句比较好 如果第一个字母一样 则判断用情况语句或if语句判断第二个字母 Monday Tuesday Wednesday Thursday Friday Saturday Sunday T 2 S 2 public cla
  • 计算机刚开始学什么时候,新手如何开始学电脑 新手学电脑从何入门

    虽然现在手机已经占据了互联网的半壁江山 但是生活中免不了需要接触电脑 用U盘拷贝份文件 用打印机打印份文档 在电脑上下载一首歌 电影 图片等 都离不开电脑 很多人觉得电脑跟自己无关 也许当你需要用的时候 才会觉得 书到用时方恨少 那么对于一
  • U-Boot 图形化配置及其原理

    目录 U Boot 图形化配置体验 如何使能dns 命令 menuconfig 图形化配置原理 make menuconfig 过程分析 Kconfig 语法简介 1 mainmenu 2 调用其他目录下的Kconfig 文件 3 menu
  • TypeError: buildURL is not a function

    报错图 uni app 使用axios发请求 运行到微信开发者工具报错 使用了网络上axios适配器方案 没有效果 问题没有解决 请求没发出去 这个问题已经解决uni app和微信开发者工具兼容axios 主页文章有仔细查看
  • java中的注释及其快捷键

    1 单行注释 快捷键 Ctrl 再次点击取消注释 2 多行注释 快捷键 Ctrl Shift 要取消注释只能手动删除 3 文档注释 内容 内容 内容 作用 为类或方法添加说明 快捷键 enter
  • sigmod 函数与softmax 函数对比

    sigmod 函数与softmax 函数之间既有类似 又有差异 是两种典型的深度神经网络的activation functions 通俗而言 sigmod 函数常用于二分类 softmax 函数常用于多分类 两者都起到了压缩的作用 sigm
  • 基于JAVA Seleium 的自动化测试

    目录 1 什么是Seleium 2 Selenium环境引入 3 selenium基本使用 4 框架优化 5 元素其他操作 6 关于获取不到元素 1 什么是Seleium Selenium是一个用于Web应用程序测试的工具 Selenium
  • Week5_Test2

    package JAVA API Test import com sun xml internal ws api model wsdl WSDLOutput import java io import java util Arrays au
  • django官网网址

    django官网网址 https www djangoproject com start overview https docs djangoproject com en dev ref models querysets django db
  • STC89C52原理

    STC89C52单片机介绍 STC89C52RC是STC公司生产的一种低功耗 高性能CMOS8位微控制器 具有8K字节系统可编程Flash存储器 STC89C52使用经典的MCS 51内核 标准功能 具有以下标准功能 8k字节Flash 5
  • c#的二进制序列化组件MessagePack介绍

    c 的序列化有多种 我一般喜欢用第三方组件 一个公共组件要拿出来用 而且支持很多语言 甚至以此谋生 肯定有其优势 有或者说存在必然有其合理性 经过几年开发 我更加喜欢第三方的东西 类似序列化的东西 开篇总是牢骚 大家要习惯哈 最近在写一个小