【问题标题】:Creating objects using an older version of Google Protobuf使用旧版 Google Protobuf 创建对象
【发布时间】:2017-01-24 19:06:08
【问题描述】:

我最初使用 Google Protobuf 3.1 protoc 编译器来自动生成 Filepath.cs 类。因为 filepath.proto 文件是为 proto2 语法编写的,所以我不得不手动更改文件以适应 proto3。

事实证明,出于我无法控制的原因,我需要坚持使用 proto2 语法。我发现 protoc 版本 3.0.0alpha3 支持 proto2 文件的 C# 代码生成(较新的 protoc 版本不支持 proto2 文件的 c# 代码生成,这就是我恢复到 alpha 3 的原因)。

生成的代码不同,而我之前存在的代码(最初使用 protoc 3.1,不再有效):

    FilePath fp = new FilePath
    {
        Path = "TestPath",
        TestValue = 5.0f
    };  

这段代码不再适用于 alpha3 生成的文件。有谁知道如何使用旧版本的 Protobuf 正确序列化/反序列化对象,或者旧教程是否存档在某个地方?

我能做到:

FilePath fp; 
fp.Path = "test_path_here"; //ERROR - no SETTER, only a GETTER

PathTestValue 字段只有 getter,没有 setter。

【问题讨论】:

    标签: c# protocol-buffers protobuf-csharp-port


    【解决方案1】:

    通过访问 github 上旧版本的 Protobufs 项目来解决这个问题。我找到了一个 java 示例,它让我弄清楚如何在 C# 中创建一个新对象。看看这个 3.0.x 的源码,你应该就能明白了:https://github.com/google/protobuf/blob/3.0.x/examples/AddPerson.java

    这就是我最终的结果:

        FilePath.Builder fp = FilePath.CreateBuilder();
        fp.SetPath("TestPath");
        fp.SetTestValue(7.0f);
    

    【讨论】:

      猜你喜欢
      • 2013-07-20
      • 2022-08-05
      • 2021-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      相关资源
      最近更新 更多