使用protobuff-csharp端口读取protobuff文本文件
本文关键字:protobuff 文本 文件 读取 protobuff-csharp 使用 | 更新日期: 2023-09-27 18:19:04
我使用protobuf-csharp-port库在文本中写入和读取消息。
我能够使用以下代码在文本中编写消息,但我无法找到如何将此消息读取回原型buff类型定义的任何示例。
我使用下面的代码来创建person目录文本文件。
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"
}
我现在如何将此文本数据读取回Person定义?
此外,当尝试使用以下代码读取此文件时,我得到一个错误"协议消息标记具有无效的连线类型"。
using (Stream inputStream = new FileStream(@"C:'PersonDirectory.txt", FileMode.Open, FileAccess.Read))
{
PeopleDir pd = PeopleDir.CreateBuilder().MergeFrom(inputStream).Build();
}
在谷歌上搜索了更多关于这个错误的信息后,我找到了一个基于StackOverflow问题答案的解决方案。
为了帮助其他想要做同样事情的人,我在下面发布了我的解决方案。
我用了一个类似的方法来得到下面问题的答案Protobuf错误:协议消息标签有无效的连线类型
在我的例子中,读取protobuff格式的person文本文件的代码是:
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();
}