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

2024-08-25 03:04

本文主要是介绍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时遇到的错误,及解决办法。






😜
😜😜
😜😜😜😜

这篇关于C# messagePack对类(class)序列化简单示例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1104357

相关文章

Python yield与yield from的简单使用方式

《Pythonyield与yieldfrom的简单使用方式》生成器通过yield定义,可在处理I/O时暂停执行并返回部分结果,待其他任务完成后继续,yieldfrom用于将一个生成器的值传递给另一... 目录python yield与yield from的使用代码结构总结Python yield与yield

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

MySQL常用字符串函数示例和场景介绍

《MySQL常用字符串函数示例和场景介绍》MySQL提供了丰富的字符串函数帮助我们高效地对字符串进行处理、转换和分析,本文我将全面且深入地介绍MySQL常用的字符串函数,并结合具体示例和场景,帮你熟练... 目录一、字符串函数概述1.1 字符串函数的作用1.2 字符串函数分类二、字符串长度与统计函数2.1

C#中lock关键字的使用小结

《C#中lock关键字的使用小结》在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时,其他线程无法访问同一实例的该代码块,下面就来介绍一下lock关键字的使用... 目录使用方式工作原理注意事项示例代码为什么不能lock值类型在C#中,lock关键字用于确保当一个线程位于给定实例的代码块中时

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作

C# $字符串插值的使用

《C#$字符串插值的使用》本文介绍了C#中的字符串插值功能,详细介绍了使用$符号的实现方式,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录$ 字符使用方式创建内插字符串包含不同的数据类型控制内插表达式的格式控制内插表达式的对齐方式内插表达式中使用转义序列内插表达式中使用

C#中的Converter的具体应用

《C#中的Converter的具体应用》C#中的Converter提供了一种灵活的类型转换机制,本文详细介绍了Converter的基本概念、使用场景,具有一定的参考价值,感兴趣的可以了解一下... 目录Converter的基本概念1. Converter委托2. 使用场景布尔型转换示例示例1:简单的字符串到

MySQL CTE (Common Table Expressions)示例全解析

《MySQLCTE(CommonTableExpressions)示例全解析》MySQL8.0引入CTE,支持递归查询,可创建临时命名结果集,提升复杂查询的可读性与维护性,适用于层次结构数据处... 目录基本语法CTE 主要特点非递归 CTE简单 CTE 示例多 CTE 示例递归 CTE基本递归 CTE 结

Spring AI使用tool Calling和MCP的示例详解

《SpringAI使用toolCalling和MCP的示例详解》SpringAI1.0.0.M6引入ToolCalling与MCP协议,提升AI与工具交互的扩展性与标准化,支持信息检索、行动执行等... 目录深入探索 Spring AI聊天接口示例Function CallingMCPSTDIOSSE结束语

go动态限制并发数量的实现示例

《go动态限制并发数量的实现示例》本文主要介绍了Go并发控制方法,通过带缓冲通道和第三方库实现并发数量限制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录带有缓冲大小的通道使用第三方库其他控制并发的方法因为go从语言层面支持并发,所以面试百分百会问到