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时遇到的错误,及解决办法。
😜
😜😜
😜😜😜😜