C# messagePack对类(class)序列化简单示例

news2024/11/15 5:21:03

c# messagepack对类(class)序列化的简单示例

  • 0 引言
  • 1 示例
  • 2 纠错
  • 3 结语

0 引言

  MessagePack是一种高效的二进制序列化格式,它可以在C#中用于序列化和反序列化对象。与其他序列化格式相比,如JSON和XML,MessagePack的编码和解码速度更快,生成的二进制数据更小。

  C#中使用MessagePack进行序列化和反序列化非常简单。可以使用NuGet包管理器安装MessagePack库到工程项目中,安装最新版本即可。安装后可以通过下面命令,对需要的类/数据进行序列化,得到序列化后的字节数组。

byte[] bin = MessagePackSerializer.Serialize(input);

  然后,可通过下面命令将字节数组再反序列化回对应的类/数据;

<T> res = MessagePackSerializer.Deserialize<T>(bin);

1 示例

   下面是使用messagePack进行序列化和反序列化的一个示例:

// 定义一个静态方法输入一个需要进行序列化的类,反序列化输出一个类
using MessagePack;
using static WindowsFormsApp1.@interface;
using KeyAttribute = MessagePack.KeyAttribute;

namespace WindowsFormsApp1
{

	// 定义进行序列化的类
    [MessagePackObject]
    public class test1_method
    {
        [Key(0)]
        public string Name { get; set; }

        [Key(1)]
        public int Age { get; set; }

        [Key(2)]
        public double[] HomeAddress { get; set; }
    }
    [MessagePackObject]
    public class test1_method_out
    {
        [Key(1)]
        public double[] HomeAddress { get; set; }
    }


    class @interface
    {

        /// <summary>
        /// 序列/反序列接口调用
        /// </summary>
        public static void Process<tinput,tresult>(tinput input, out tresult res)
        {
            byte[] bin = MessagePackSerializer.Serialize(input); // 序列化
            res = MessagePackSerializer.Deserialize<tresult>(bin); // 反序列化
        }
        
    }
}
// 测试messagepack是否可以正确调用
        public Form1()
        {
            test1_method aa = new test1_method
            {
                Name = "nihao",
                Age = 14,
                HomeAddress = new double[5] { 1, 2, 3, 4, 5 }
            };
            test1_method bb;
            Process(aa, out bb); // 序列化和反序列化执行函数
            InitializeComponent();
        }

执行后结果:

  执行之后能够看到,aa类经过序列化/反序列化后得到的bb类,bb类中的属性值与aa一致,说明序列化/反序列化实现了对类的可逆操作,这可以方便应用到制作API接口上。


2 纠错

   在初次使用messagePack时遇到了下面错误,会造成的序列化失败,错误信息大概为下面内容。

“TypeLoadException: 程序集“MessagePack.Resolvers.DynamicObjectResolver, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”的类型“MessagePack.Formatters.WindowsFormsApp1_interface+class”尝试实现不可访问的接口。”:


  经过多种尝试,发现将要进行序列化的类挪到命名空间下,再执行序列化就不会出错了。

	// 定义进行序列化的类(这样定义上面错误不会出现)
namespace WindowsFormsApp1
{
    [MessagePackObject]
    public class test1_method
    {
        [Key(0)]
        public string Name { get; set; }

        [Key(1)]
        public int Age { get; set; }

        [Key(2)]
        public double[] HomeAddress { get; set; }
    }
 。。。。。
}
	// 定义进行序列化的类(这样定义在进行序列化的时候就会出错)
namespace WindowsFormsApp1
{
  class @interface    // 。。。。。。
    {
    
    [MessagePackObject]
    public class test1_method
    {
        [Key(0)]
        public string Name { get; set; }

        [Key(1)]
        public int Age { get; set; }

        [Key(2)]
        public double[] HomeAddress { get; set; }
    }
    
 。。。。。
   }
}

3 结语

   本篇简单介绍了在c#下使用messagepack序列化/反序列化的方法,提供了运行示例,记录了初次使用messagepack时遇到的错误,及解决办法。






😜
😜😜
😜😜😜😜

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2070772.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

西安电子高速PCB学习(五)

感抗&#xff08;Inductive Reactance&#xff09;和容抗&#xff08;Capacitive Reactance&#xff09;是电感和电容在交流电路中对电流产生阻碍的特性。这两个概念源于交流电路中&#xff0c;电感和电容对交流电流的相应反应。 感抗&#xff08;Inductive Reactance&#xf…

如何使用ssm实现电脑配件销售系统的设计与实现

TOC ssm128电脑配件销售系统的设计与实现jsp 第一章 绪 论 1.1背景及意义 系统管理也都将通过计算机进行整体智能化操作&#xff0c;对于电脑配件销售系统所牵扯的管理及数据保存都是非常多的&#xff0c;例如管理员&#xff1b;主页、个人中心、用户管理、商品分类管理、商…

PyTorch升级之旅——主要组成模块

本文仅作为个人学习记录使用 文章目录 前言 一、深度学习的简单流程 二、基本配置 三、数据读入 四、模型构建 五、模型初始化 六、损失函数 七、训练和评估 八、可视化 九、PyTorch优化器 总结 前言 学习链接&#xff1a;第三章&#xff1a;PyTorch的主要组成模块…

推荐几个缓解工作心情的VS Code插件

vs-cats 使用了这个插件&#xff0c;在写到"cat"/"Cat"单词时&#xff0c;可以在单词左边出现猫猫表情&#xff0c;而且在鼠标停靠在单词附近时还能显示猫猫图片 vscode-pets 使用这个插件可以在VS Code中养很多电子小动物&#xff0c;可以饲养的宠物有&a…

跟《经济学人》学英文:2024年08月24日这期 How to attract Indian tourists

How to attract Indian tourists Destinations are competing for the travelling rupee 原文&#xff1a; INDIANS ARE on the move. In 2019 international departures from India hit 27m, a number that will surely be exceeded this year and is predicted to rise t…

2024年好用的4款电脑录屏工具清单。

如果你需要录制教学视频、操作演示、记录游戏等等&#xff0c;但不知道使用哪些软件可以实现&#xff0c;那你一定要看看这个文章。因为我帮助大家筛选了4款能够用于电脑屏幕录制的高效工具。 1、福昕电脑REC 直达&#xff1a;www.foxitsoftware.cn/REC/ 这个软件是很多必备的…

电商api接口进行数据采集获取多平台商品价格

在电商运营中&#xff0c;从品牌角度来看&#xff0c;品牌方通过接口进行数据采集&#xff0c;获取多渠道商品价格信息的这一行为&#xff0c;能为品牌方带来诸多好处&#xff1a; 及时准确&#xff1a;API接口能为品牌提供实时数据&#xff0c;这意味着企业可以即时获取最新的…

Transformer总结(三):组件介绍(位置编码,多头注意,残差连接,层归一化,基于位置的前馈网络)

文章目录 一、位置编码1.1 介绍1.2 简单探讨 二、多头注意力2.1 一般的多头注意力机制2.2 解码器中的掩码多头注意力机制&#xff08;Look-ahead Mask&#xff09; 三、残差连接四、层归一化4.1 对比不同的Normalization4.2 Batch Normalization的实现4.3 Layer Normalization的…

vue3使用simple-mind-map,分分钟开发思维导图

这几天又来了新需求&#xff0c;老板想在系统里一眼可以看到所有部门的相关信息&#xff0c;并且可以编辑&#xff0c;分配任务。所以需要实现一个可编辑的思维导图页面。 思维导图&#xff1f;感觉很复杂的样子&#xff0c;这种很牛p的东西应该不是我三两天就能手写搞定的&am…

I2C代码硬件实现

环境 芯片:STM32F103ZET6 库&#xff1a;来自HAL的STM32F1XX.H 原理图 有图可知SCL和SDA两条线接到了PB10和PB11 芯片的复用功能是I2C2 代码 Driver_I2C.h #include "Driver_I2C.h"void Driver_I2C_Init(void) {/* 1. 打开引脚和片上外设的时钟 I2C2 PB10 PB11 …

【提示学习论文】AAPL: Adding Attributes to Prompt Learning for Vision-Language Models

AAPL: Adding Attributes to Prompt Learning for Vision-Language Models&#xff08;2024CVPR&#xff09; 问题&#xff1a;在unseen class上&#xff0c;性能提升有限解决&#xff1a;在提示学习中引入对抗性标记嵌入adversarial token embedding&#xff0c; 将低层次视觉…

SOMEIP_ETS_060: SD_Discover_Port_and_IP

测试目的&#xff1a; 验证设备&#xff08;DUT&#xff09;能够响应测试器发出的多播FindService消息&#xff0c;并返回一个单播OfferService消息&#xff0c;列出所有必要的IP地址和端口&#xff0c;以满足与DUT的所有可能通信需求。 描述 本测试用例旨在检查DUT是否能够…

清理linux的buff/cache缓存

通过free -m命令&#xff0c;查看内存占用率。 如果buff/cache 占用内存过高的话&#xff0c;执行以下命令 sync && echo 1 > /proc/sys/vm/drop_caches sync && echo 2 > /proc/sys/vm/drop_caches sync && echo 3 > /proc/sys/vm/drop_ca…

文字怎么生成二维码扫码展示?文本活码在线生成的3步操作技巧

现在很多人会将文本信息用生成二维码的方式来展现&#xff0c;通过二维码来分享内容能够有效的提升内容的传播效率&#xff0c;简化其他人获取信息的流程。只需要通过扫码就能在手机上预览内容&#xff0c;更加符合现在人们的生活习惯&#xff0c;而且这种方式可以降低制作者的…

bedtools安装与使用(v2.31.1)生物信息学工具29

01 背景 bedtools&#xff1a;一个用于基因组算术的强大工具集 总体而言&#xff0c;bedtools 工具集是一个多功能的工具包&#xff0c;可用于广泛的基因组分析任务。其中最广泛使用的工具能够进行基因组算术运算&#xff0c;即在基因组上执行集合论操作。例如&#xff0c;be…

前端实现投影坐标和地理坐标系(CGCS2000)转换

前言 地理坐标系和投影坐标系是地理信息系统&#xff08;GIS&#xff09;和制图学中用于描述地球表面位置的两种不同的参考系统。它们在使用方式和应用场景上有显著的区别。 1、什么是地理坐标系和投影坐标系&#xff1f; 1.1、地理坐标系 地理坐标系是基于地球的三维球面模…

虚拟机安装centos7-桥接模式

1、打开虚拟机&#xff0c;点击文件&#xff0c;选择新建虚拟机 2、选择典型&#xff0c;点击下一步 3、选择稍后安装操作系统&#xff0c;点击下一步 4、选择系统类型及版本&#xff0c;点击下一步&#xff0c;因centos7是Linux操作系统&#xff0c;且是64位的&#xff0c;所以…

隐藏的艺术:滥用 404 页面的新 Magecart 活动

介绍 一项新的、复杂的、隐蔽的 Magecart 网页窃取活动已针对 Magento 和 WooCommerce 网站展开。该活动的部分受害者与食品和零售行业的大型组织有关。 根据我们发现的证据,该活动已经持续了几周,在某些情况下甚至更长。该活动采用了一种我们以前从未遇到过的高级隐藏技术…

Linux 内核源码分析---组播/策略路由选择

在 Linux 实现中&#xff0c;组播路由选择不像单播路由选择那样可以由内核单独处理&#xff0c;组播守护程序种类繁多&#xff0c;如 mrouted 和 pimd&#xff0c;它们分别基于距离矢量组播路由选择协议&#xff08;Distance Vector Multicast Routing Protocol&#xff0c;DVM…

《在数字化时代筑牢软件服务的稳定性防线》

&#x1f4e2;博客主页&#xff1a;https://blog.csdn.net/2301_779549673 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; 如有错误敬请指正&#xff01; &#x1f4e2;本文由 JohnKi 原创&#xff0c;首发于 CSDN&#x1f649; &#x1f4e2;未来很长&#…