c# - 使用 MsgPack 序列化 c# 对象,而不是使用 MsgPack Cli 序列化 Json

标签 c# json.net msgpack

我正在尝试使用 c# 中的 MsgPack 实现一种 JSON 序列化 我正在使用 MsggPack CLI,您可以在 https://github.com/msgpack/msgpack-cli

根据msgpack.org文档,序列化模型

{"model":"message"}

给出十六进制

81 a5 6d 6f 64 65 6c a7 6d 65 73 73 61 67 65

但是当尝试在 C# 中执行相同操作时(当然是使用幼稚的方法)

using MsgPack.Serialization;

public class Test
{
    public string model { get; set; }
}       

public class Program
{
    static void Main(string[] args)
    {
        Test a = new Test();
        a.model = "message";

        var requestSerializer = MessagePackSerializer.Get(a.GetType());
        MemoryStream stream = new MemoryStream();
        requestSerializer.Pack(stream, a);
        byte[] res = stream.ToArray();
    }
}

我得到了

91 a7 6d 65 73 73 61 67 65

其中“模型”名称被跳过...

如何解决???

最佳答案

终于找到简单的方法了。 根据文档,序列化格式默认为“数组”,我需要“ map ”。 使用

SerializationContext ctx = new SerializationContext() { SerializationMethod = SerializationMethod.Map };
...

var requestSerializer = MessagePackSerializer.Get(a.GetType(), ctx);

发挥技巧。

问候

关于c# - 使用 MsgPack 序列化 c# 对象,而不是使用 MsgPack Cli 序列化 Json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38597954/

相关文章:

c# - 从生产代码中查找修订信息,允许链接到源代码

c# - 调用值类型的方法

c# - 如何从 json 序列化中排除特定类型

c++ - 在 C++ 中使用 MessagePack 反序列化异构映射

c# - 在 MessagePack 中将具有接口(interface)作为属性类型的对象序列化

带有 float 的 Java msgpack 类崩溃

c# - 缺少带有主调度程序的模块。添加提供主要调度程序的依赖项,例如 'kotlinx-coroutines-android'

c# - 无法更改 sql server 文件数据库大小

C# JsonConvert 使用默认转换器而不是自定义转换器

json - 如何在没有格式化的情况下序列化 JObject?