【问题标题】:How to use MessagePack in C#?如何在 C# 中使用 MessagePack?
【发布时间】:2013-03-28 14:26:58
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: c# .net serialization messagepack


    【解决方案1】:

    在最新版本的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);
    

    【讨论】:

      【解决方案2】:

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

      Install MessagePack for CLI from Nuget packages
      

      然后像这样包含

      using MsgPack.Serialization;
      

      【讨论】:

        【解决方案3】:

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

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

        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,具体函数调用在here

        【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-11-23
            • 2013-12-07
            • 1970-01-01
            • 2014-08-16
            • 1970-01-01
            • 1970-01-01
            • 2011-09-22
            • 1970-01-01
            相关资源
            最近更新 更多