如何在C#中使用MessagePack?

问题描述 投票:0回答:6

我阅读了 msgpack-cli 快速入门文档。

我还获得了 C# (CLI) NuGet 包 (v0.3)。

官方文档中提到的所有类(例如

BoxingPacker
CompiledPacker
ObjectPacker
)都不存在于NuGet包中(!!)。我假设该文档已被孤立。

那么有人有如何在 C# 中序列化到 MessagePack 或从 MessagePack 反序列化的示例吗?我正在尝试对一个对象执行此操作,并且对序列化器的二进制性质感兴趣。

c# .net serialization messagepack
6个回答
9
投票

致未来的读者:基于这些结果,我会选择 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); } }

整个研发型项目,结果在

https://github.com/sidshetye/SerializersCompare,具体函数调用在这里


3
投票
我很惊讶,没有人明白用户问的是什么。 msgpack 有很多 nuget 包,使用哪一个以及如何包含在项目中确实令人困惑。我假设用户像我一样想知道如何将 msgpack 包含在 .net 项目中。

Install MessagePack for CLI from Nuget packages

然后像这样包含

using MsgPack.Serialization;
    

0
投票
在最新版本的

msgpack-cli

中,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);
    

0
投票
十年来发生了很多变化。 MessagePack 又快又小,这与公认的答案相反。我们现在使用

MessagePack-CSharp库。

您可以在这里看到它比旧的 msgpack-cli 更快、更小:

使用起来很方便。

包装:

MyObjectType myObject = new(); byte[] packed = MessagePackSerializer.Serialize(myObject);
拆开包装:

MyObjectType unPacked = MessagePackSerializer.Deserialize<MyObjectType>(packed);
    

-1
投票
我在以下位置找到了一个示例:

http://www.irisclasson.com/2012/12/17/serializing-and-deserializing-packingunpacking-to-a-file-andor-memorystream-with-messagepack-in-c/ 我在代码中测试它,并通过 zmq 将 Byte[] 数据发送到另一台主机。 它有效。


-2
投票
从 NuGet 安装名为 MsgPack 的包。看这里的图片:

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.