Создание объектов с использованием более старой версии Google Protobuf
Первоначально я использовал Google Protobuf 3.1 protoc компилятор для автоматической генерации класса Filepath.cs. Поскольку файл filepath.proto был написан для синтаксиса proto2, мне пришлось вручную изменить файл, чтобы он соответствовал proto3.
Оказывается, мне нужно придерживаться синтаксиса proto2 по независящим от меня причинам. Я обнаружил, что protoc версии 3.0.0alpha3 поддерживает генерацию кода C# для файлов proto2 (более новые версии protoc не поддерживают генерацию кода C# для файлов proto2, поэтому я вернулся к альфа-3).
Сгенерированный код отличается, и мой ранее существовавший код (который первоначально работал с protoc 3.1, больше не работает):
FilePath fp = new FilePath
{
Path = "TestPath",
TestValue = 5.0f
};
Этот кусок кода больше не работает с файлами, созданными альфа3. Кто-нибудь знает, как правильно сериализовать / десериализовать объект, используя более старые версии Protobuf, или старые архивы где-то заархивированы?
Я могу сделать:
FilePath fp;
fp.Path = "test_path_here"; //ERROR - no SETTER, only a GETTER
Поля Path
а также TestValue
есть только геттеры, нет сеттеров.
1 ответ
Выяснили это, перейдя к более старой версии проекта Protobufs на github. Я нашел пример 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);