无法通过MsgPack往返简单对象

本文关键字:简单 单对象 MsgPack | 更新日期: 2023-09-27 18:22:24

所以我正在尝试使用MsgPack包(https://www.nuget.org/packages/MsgPack.Cli/)将一个简单对象往返到我的文件。我可以很好地编写打包消息,并且用二进制编辑器检查生成的对象表明数据是按我预期的方式编写的。但是,解压缩的消息总是返回为null。有人熟悉这个图书馆吗?能解释出了什么问题吗?

    public class Options
    {
        public string RecordLog { get; set; }
        public string ConfigFile { get; set; }
    }
    static void TestRoundTrip()
    {
        using (var fs = new FileStream("test.file", FileMode.OpenOrCreate, FileAccess.Write, FileShare.Read, 65535, true))
        {
            var packer = Packer.Create(fs, false);
            var options = new Options()
            {
                RecordLog = "log string",
                ConfigFile = "config string"
            };
            packer.Pack(options);
            packer.Dispose();
        }
        using (var fs = File.Open("test.file", FileMode.Open))
        {
            var unpacker = Unpacker.Create(fs, true);
            var opts = unpacker.Unpack<Options>();
            Console.WriteLine(opts.RecordLog);
            Console.WriteLine(opts.ConfigFile);
        }
    }

无法通过MsgPack往返简单对象

我通过在解包块中执行以下操作解决了这个问题:

    using (var fs = File.Open("test.file", FileMode.Open))
    {
        var unpacker = Unpacker.Create(fs, true);
        unpacker.Read();
        var opts = unpacker.Unpack<Options>();
        Console.WriteLine(opts.RecordLog);
        Console.WriteLine(opts.ConfigFile);
    }

事实证明,unpacker.Unpack<T>()仅对在对Read()的调用中已经读取的消息进行解包。我只能通过阅读来源来弄清楚这一点,幸运的是,它可以在网上找到。