所以我试图使用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);
}
}
答案 0 :(得分:0)
我通过在解压缩块中执行以下操作解决了这个问题:
compute-effective-method
事实证明, 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>()
调用中读取的消息。我只能通过阅读来源来解决这个问题,幸运的是可以在网上找到。