我阅读了msgpack-cli quick start文档。
我还得到了C#(CLI)NuGet包(v0.3)。
官方文档中提到的所有类(例如BoxingPacker
,CompiledPacker
或ObjectPacker
)都不存在于NuGet包(!!)中。我假设文档已经成为孤儿。
那么有没有人举例说明如何在C#中对MessagePack进行序列化/反序列化?我正在尝试为对象执行此操作,并且对序列化程序的二进制特性感兴趣。
答案 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的包。见图: