5

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

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

NuGet 包 (!!) 中不存在官方文档中提到的类(例如BoxingPackerCompiledPackerObjectPacker)。我假设文档已被孤立。

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

4

5 回答 5

10

致未来的读者:根据这些结果,我会选择 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,具体的函数调用在这里

于 2013-12-25T21:25:28.560 回答
3

我很惊讶,没有人理解用户的要求。msgpack 有很多 nuget 包,使用哪个以及如何包含在项目中确实令人困惑。我假设用户想知道如何像我一样将 msgpack 包含在 .net 项目中。

Install MessagePack for CLI from Nuget packages

然后像这样包含

using MsgPack.Serialization;
于 2016-05-12T07:32:14.880 回答
0

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

于 2013-06-26T10:02:15.250 回答
0

在该方法的最新版本中msgpack-cliCreate如 inMessagePackSerializer.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);
于 2016-05-10T10:26:42.043 回答
-2

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

在此处输入图像描述

于 2013-10-23T07:10:12.533 回答