我正在使用protobuf-csharp-port库来编写和阅读文本消息。
我可以使用以下代码在文本中编写消息,但是我无法找到任何关于如何将此消息读回原型buff类型定义的示例。
我使用以下代码创建人员目录文本文件。
Person p1 = Person.CreateBuilder().SetId(1).SetName("Person1").Build();
Person p2 = Person.CreateBuilder().SetId(2).SetName("Person2").Build();
PeopleDir pd = PeopleDir.CreateBuilder().AddPerson(p1).AddPerson(p2).Build();
File.AppendAllText(@"C:\PersonDirectory.txt", pd.ToString());
现在文本文件如下所示
Person {
Id: 1
Name: "Person1"
}
Person {
Id: 2
Name: "Person2"
}
我现在如何将此文本数据读回人员定义?
此外,当尝试使用以下代码读取此文件时,出现错误"协议消息标记的线路类型无效。"
using (Stream inputStream = new FileStream(@"C:\PersonDirectory.txt", FileMode.Open, FileAccess.Read))
{
PeopleDir pd = PeopleDir.CreateBuilder().MergeFrom(inputStream).Build();
}
答案 0 :(得分:1)
在搜索了一些关于此错误的更多内容之后,我根据StackOverflow上的问题答案找到了解决问题的方法。
为了其他任何尝试做同样事情的人的利益,我在下面发布我的解决方案。
我使用类似的方法来获得解决方案作为下面SO问题的答案 Protobuf error:Protocol message tag had invalid wire type
因此,在我的情况下,以protobuff格式回读人文本文件的代码将是:
using (TextReader inputStream = new StreamReader(new FileStream(@"C:\PersonDirectory.txt", FileMode.Open, FileAccess.Read), Encoding.ASCII))
{
PersonDir.Builder personDirBuilder = PersonDir.CreateBuilder();
TextFormat.Merge(inputStream, personDirBuilder);
PersonDir pd = personDirBuilder.Build();
}