如何在C#中使用MessagePack?

时间:2013-04-06 02:29:00

标签: c# .net serialization messagepack

我阅读了msgpack-cli quick start文档。

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

官方文档中提到的所有类(例如BoxingPackerCompiledPackerObjectPacker)都不存在于NuGet包(!!)中。我假设文档已经成为孤儿。

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

5 个答案:

答案 0 :(得分:6)

对于未来的读者:我会选择基于these results的Avro或Protocol Buffers甚至是基于MessagePack的Thrift ......

为了具体问题,关键部分是:

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);
    }
}

整个R&amp; D类型项目,结果为https://github.com/sidshetye/SerializersCompare,特定函数调用为here

答案 1 :(得分:2)

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

Install MessagePack for CLI from Nuget packages

然后像这样包含

using MsgPack.Serialization;

答案 2 :(得分:0)

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

答案 3 :(得分:0)

msgpack-cli的最新版本中,Create中的MessagePackSerializer.Create<T>();方法被标记为已废弃。

项目github page中给出的示例用法可能是:

// Creates serializer.
var serializer = SerializationContext.Default.GetSerializer<T>();
// Pack obj to stream.
serializer.Pack(stream, obj);
// Unpack from stream.
var unpackedObject = serializer.Unpack(stream);

答案 4 :(得分:-1)

从NuGet安装名为MsgPack的包。见图:

enter image description here