0

我最初使用 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

4

1 回答 1

0

通过转到 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);
于 2017-01-24T19:42:30.070 回答