MessageParser.ParseFrom - проблема с GUID - PullRequest
1 голос
/ 20 сентября 2019

Я сгенерировал прото-файл "Tutotial.Person", который содержит поле с именем ID типа GUID.У меня есть DTO с именем Person class в проекте C #, и я хочу заполнить класс Tutorial.Person из объекта person.Все выглядит хорошо, но GUID.После синтаксического анализа значение Guid выглядит так: «\ t {}] 2�p�D \ u0011�O [X�] o».Я довольно новичок в этой прото-вещи (как вы можете заметить из моего наивного примера ниже).Не могли бы вы сказать мне, что мне нужно сделать, чтобы получить правильный GUID?

      static void Main(string[] args) {
            var person = new Person {
                Name = "Fred",
                Id = Guid.NewGuid()
            };

            var parser = new MessageParser<Tutorial.Person>(() => new Tutorial.Person());
            using (var stream = new MemoryStream())
            {
                Serializer.Serialize(stream, person);

                var d = parser.ParseFrom(stream.ToArray());
            }  
        }

Прото-файл:

syntax = "proto3";
package tutorial;


message Person {
  string name = 1;
  string id = 2;
}

1 Ответ

0 голосов
/ 20 сентября 2019

Protobuf не имеет хорошо известного типа для хранения направляющих.Protobuf-net составил макет, но это не плоская строка.Это сложнее, чем это, но детали не полезны.

Короткая версия: если вы хотите совершить обход между платформами / библиотеками: придерживайтесь типов, которые имеют собственные представления protobuf.В этом случае string будет справедливым выбором, а не Guid.

...