C# 无法通过MsgPack往返简单对象
因此,我尝试使用MsgPack包()将一个简单对象往返到我的文件。我可以很好地编写打包的消息,并且使用二进制编辑器检查生成的对象表明数据是按照我的预期编写的。但是,未打包的消息总是返回为null。有人熟悉这个图书馆并且能解释出哪里出了问题吗C# 无法通过MsgPack往返简单对象,c#,msgpack,C#,Msgpack,因此,我尝试使用MsgPack包()将一个简单对象往返到我的文件。我可以很好地编写打包的消息,并且使用二进制编辑器检查生成的对象表明数据是按照我的预期编写的。但是,未打包的消息总是返回为null。有人熟悉这个图书馆并且能解释出哪里出了问题吗 public class Options { public string RecordLog { get; set; } public string ConfigFile { get; set; } }
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);
}
}
公共类选项
{
公共字符串记录日志{get;set;}
公共字符串配置文件{get;set;}
}
静态void TestRoundTrip()
{
使用(var fs=new FileStream(“test.file”,FileMode.OpenOrCreate,FileAccess.Write,FileShare.Read,65535,true))
{
var packer=packer.Create(fs,false);
var options=新选项()
{
RecordLog=“日志字符串”,
ConfigFile=“配置字符串”
};
打包机(可选);
packer.Dispose();
}
使用(var fs=File.Open(“test.File”,FileMode.Open))
{
var unpacker=unpacker.Create(fs,true);
var opts=unpacker.Unpack();
Console.WriteLine(opts.RecordLog);
Console.WriteLine(opts.ConfigFile);
}
}
我通过在解包块中执行以下操作来解决此问题:
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);
}
使用(var fs=File.Open(“test.File”,FileMode.Open))
{
var unpacker=unpacker.Create(fs,true);
unpacker.Read();
var opts=unpacker.Unpack();
Console.WriteLine(opts.RecordLog);
Console.WriteLine(opts.ConfigFile);
}
事实证明,
unpacker.Unpack()
只解压缩调用read()
时已读取的消息。我只能通过阅读源代码来解决这个问题,幸运的是它可以在线获得。我通过在解包块中执行以下操作来解决这个问题:
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);
}
使用(var fs=File.Open(“test.File”,FileMode.Open))
{
var unpacker=unpacker.Create(fs,true);
unpacker.Read();
var opts=unpacker.Unpack();
Console.WriteLine(opts.RecordLog);
Console.WriteLine(opts.ConfigFile);
}
事实证明,unpacker.Unpack()
只解压缩调用read()
时已读取的消息。我只能通过阅读源代码来了解这一点,幸运的是,它可以在网上找到