我阅读了 msgpack-cli 快速入门文档。
我还获得了 C# (CLI) NuGet 包 (v0.3)。
官方文档中提到的所有类(例如
BoxingPacker
、CompiledPacker
或ObjectPacker
)都不存在于NuGet包中(!!)。我假设该文档已被孤立。
那么有人有如何在 C# 中序列化到 MessagePack 或从 MessagePack 反序列化的示例吗?我正在尝试对一个对象执行此操作,并且对序列化器的二进制性质感兴趣。
致未来的读者:基于这些结果,我会选择 Avro 或 Protocol Buffers,甚至 Thrift over MessagePack ...
针对具体问题,关键部分是:
public byte[] Serialize<T>(T thisObj)
{
var serializer = MessagePackSerializer.Create<T>();
using (var byteStream = new MemoryStream())
{
serializer.Pack(byteStream, thisObj);
return byteStream.ToArray();
}
}
public T Deserialize<T>(byte[] bytes)
{
var serializer = MessagePackSerializer.Create<T>();
using (var byteStream = new MemoryStream(bytes))
{
return serializer.Unpack(byteStream);
}
}
整个研发型项目,结果在
Install MessagePack for CLI from Nuget packages
然后像这样包含
using MsgPack.Serialization;
Create
中的
MessagePackSerializer.Create<T>();
方法被标记为已过时。项目的
github 页面中给出的示例用法可能是:
// Creates serializer.
var serializer = SerializationContext.Default.GetSerializer<T>();
// Pack obj to stream.
serializer.Pack(stream, obj);
// Unpack from stream.
var unpackedObject = serializer.Unpack(stream);
MessagePack-CSharp库。
您可以在这里看到它比旧的 msgpack-cli 更快、更小:使用起来很方便。
包装:
MyObjectType myObject = new();
byte[] packed = MessagePackSerializer.Serialize(myObject);
拆开包装:
MyObjectType unPacked = MessagePackSerializer.Deserialize<MyObjectType>(packed);
http://www.irisclasson.com/2012/12/17/serializing-and-deserializing-packingunpacking-to-a-file-andor-memorystream-with-messagepack-in-c/ 我在代码中测试它,并通过 zmq 将 Byte[] 数据发送到另一台主机。 它有效。