我最初使用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
字段Path
和TestValue
只有getter,没有setter。
答案 0 :(得分: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);