Десериализовать строковые массивы в буфере протокола c ++ - PullRequest
0 голосов
/ 11 июня 2018

Я отправляю объект, который содержит 2 строковых массива из программы на C #, в программу на C ++ с rabbitmq.Класс в программе C # выглядит следующим образом:

namespace LPRRabbitMq.Class
{
    [ProtoContract(SkipConstructor = true)]
    public class BlackAndWhiteList
    {
        [ProtoMember(1)]
        public string[] BlackList { get; set; }

        [ProtoMember(2)]
        public string[] WhiteList { get; set; }
   }
}

Код для сериализации объекта в C #:

 byte[] data;

 using (var ms = new MemoryStream())
 {
     Serializer.Serialize(ms, blackAndWhite);
     data = ms.ToArray();
 }

Теперь я хочу получить данные в программе C ++,Я создал файл прото:

syntax = "proto2";
package Protobuf;

message BlackAndWhiteList {
    optional bytes BlackList = 1;
    optional bytes WhiteList = 2;
}

Я получаю сообщение о программе на C ++, но как я могу десериализовать данные и как в конечном итоге сохранить каждый массив строк в отдельном массиве?

1 Ответ

0 голосов
/ 11 июня 2018

Лучше всего попросить библиотеку помочь вам:

var proto = Serializer.GetProto<BlackAndWhiteList>(ProtoSyntax.Proto2);

Это даст вам:

syntax = "proto2";
package LPRRabbitMq.Class;

message BlackAndWhiteList {
   repeated string BlackList = 1;
   repeated string WhiteList = 2;
}

, который расскажет вам, как лучше всего это представить.Используя repeated здесь, вы сможете правильно идентифицировать отдельные элементы в коде C ++.И используя string, он должен быть подходящим типом для C ++.

...