2017-01-24 6 views
0

Я изначально использовал протоковый компилятор Google Protobuf 3.1 для автоматического создания класса Filepath.cs. Поскольку файл filepath.proto был написан для синтаксиса proto2, мне пришлось вручную изменить файл, чтобы он соответствовал proto3.Создание объектов с использованием старой версии Google Protobuf

Оказывается, мне нужно придерживаться синтаксиса proto2 по причинам, находящимся вне моего контроля. Я обнаружил, что protoc версии 3.0.0alpha3 поддерживает генерацию кода C# для файлов proto2 (новые версии protoc не поддерживают создание кода C# для файлов proto2, поэтому я вернулся к альфа-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 только добытчиками, ни сеттеров.

ответ

0

Выяснил это, перейдя к старой версии проекта 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); 

 Смежные вопросы

  • Нет связанных вопросов^_^