当前位置: 首页 > news >正文

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

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.mrgr.cn/news/7854.html

相关文章:

  • bug----jdk17使用JOL无法输出java对象的存储布局
  • Web自动化测试:selenium使用详解
  • 常见分布式ID解决方案的优缺点
  • QT Quick QML 网络助手——TCP客户端
  • Python---函数
  • 【Java 优先队列(小顶堆) 分治法 实现合并k个排序链表】
  • 爵士编曲:调式音阶 音阶同和弦 中古调式/教会音阶 旋律小调 减音阶 半音阶 Bebop
  • vue---echarts环形图
  • MyBatis-Plus分页插件使用详解
  • SGM(Score-Based Generative Model)扩散模型简介
  • K8S Secret
  • 批量自动校正图片、PDF文档方向工具
  • [数据集][目标检测]考场行为作弊检测数据集VOC+YOLO格式4413张4类别
  • 基础概念与简单数据结构的学习笔记
  • 虚拟机安装centos7-桥接模式
  • [MRCTF2020]Hello_ misc
  • Flutter【01】状态管理
  • 【GNSS接收机】开源导航接收机
  • 【MySQL】字符串存储类型比较
  • EXCEL 分组后找出满足条件的行拼接起来