c# - 反序列化 Protocol Buffer c++中的字符串数组

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

我正在使用 rabbitmq 将包含 2 个字符串数组的对象从 C# 程序发送到 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++程序中获取数据。我创建了一个原型(prototype)文件:

syntax = "proto2";
package Protobuf;

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

我在 C++ 程序上收到消息,但我如何反序列化数据以及如何最终将每个字符串数组保存在一个单独的数组中?

最佳答案

最好的办法是请图书馆帮助您:

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++ 的类型。

关于c# - 反序列化 Protocol Buffer c++中的字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50794595/

相关文章:

c# - 为具有大量依赖项的库创建包装器的正确方法

rabbitmq 客户端在尝试声明队列时挂起

c# - 正则表达式匹配 C# 中的路径

c# - 有没有办法捕获 lambda 表达式,这样它就不会在编译时被迫采用表达式或委托(delegate)类型的身份?

c# - 编辑以编程方式创建的数据表 asp.net webforms

java - 如何使用 Java RabbitMQ 并设置 URI 服务器?

c# - RabbitMQ 和序列化奇怪的错误

c++ - 是否可以将 reinterpret_cast unsigned char 数组移植为仅包含 C++ 中 unsigned chars 成员的结构指针

c++ - 将 RGB 图像保存为 PPM 格式

c++ - 从 std::vector<unsigned char> 读取二进制数据的最简单方法?