gpt4 book ai didi

c# - 使用 protobuff-csharp 端口读取 protobuff 文本文件

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:54 24 4
gpt4 key购买 nike

我正在使用 protobuf-csharp-port 库以文本形式写入和读取消息。

我可以使用以下代码以文本形式编写消息,但我找不到任何示例来说明如何将此消息读回到原型(prototype) 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"
}

我现在如何将此文本数据读回到 Person 定义中?

此外,当尝试使用以下代码读取此文件时,我收到错误消息“协议(protocol)消息标记的线路类型无效。”

using (Stream inputStream = new FileStream(@"C:\PersonDirectory.txt", FileMode.Open, FileAccess.Read))
{
PeopleDir pd = PeopleDir.CreateBuilder().MergeFrom(inputStream).Build();
}

最佳答案

在谷歌上搜索了更多关于这个错误的信息后,我根据 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();
}

关于c# - 使用 protobuff-csharp 端口读取 protobuff 文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25451429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com