我试图通过QPID(一个消息传递系统)将对象作为序列化字符串从C语言发送到C# . 我目前有一个Google原型文件:
package Serializable;
message Order_ser
{
optional int32 openord = 1 [default = 0];
optional int32 oldord = 2 [default = 0];
optional double price = 3 [default = 0];
}
通过C传输对象时,我在C#end得到错误
Protocol message tag had invalid wire type.
只有在我为double类型(例如price)分配值时才会发生这种情况 .
2 回答
尽管名称,我不相信
SerializeAsString
真的将它转换成文本 - 所以你不应该将二进制数据解释为UTF-8编码的文本,这是错误的 .我对QPID一无所知,但假设您可以通过这种方式传输任意二进制消息,那就是您应该做的 . 如果你不能通过QPID传输任意二进制消息,那么协议缓冲区可能不适合你 - 它们实际上被设计为一个有效的二进制表示 . 您当然可以对数据进行64位编码,但您可能会发现有更合适的方法 .
正如Jon Skeet所说,我认为SerializeAsString将以其文本表示形式返回协议缓冲区(参见https://developers.google.com/protocol-buffers/docs/overview),即
对字符串的简单写入将确定这是否正确 . 这种格式与二进制格式没有关系,所以你要尝试反序列化.2408706_ .
选项(最好到最差顺序)是* Serialise到byte Array和send / retrieve as bytes * Serialise到byte Array和encode / decode byte Array as Base64 *像你一样编码为String并使用String-Deserialise .
我不使用C或C#所以不能建议使用Code