在协议缓冲区c ++中反序列化字符串数组

时间:2018-06-11 09:36:10

标签: c# c++ rabbitmq protocol-buffers protobuf-net

我发送一个包含2个字符串数组的对象,从C#程序到带有rabbitmq的C ++程序。 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 :(得分:1)

这里最好的选择是请图书馆帮助你:

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 ++的适当类型出现。