Protobuf-net - serializing .NET GUID - how to read this in C++?

只谈情不闲聊 提交于 2019-12-02 13:38:12

问题


I have serialized an object using Protobuf-net , in my .NET application, with relative ease. I also get the .proto file that protobuf-net generated, using GetProto() command.

In the .NET generated .proto file, my GUID fields get a type of "bcl.guid".

Now I wish to compile the .proto file in C++ so I can deserialize the data.

However, C++ protoc.exe compiler does not know how to interpret bcl.guid, and throws an error message "VideoAudioStructs.proto:11:13: "Guid" is not defined." What do I do with this?


回答1:


protobuf-net encodes this as a pair of fixed-length 64 bit values at fields 1 and 2. I haven't tried it for interop purposes, but you could try importing the (bespoke) bcl.proto (I think this is in the deployment folder; if not let me know and I'll add it; otherwise it is in the trunk).

But conceptually it is just:

message guid {
  optional fixed64 lo = 1; // the first 8 bytes of the guid
  optional fixed64 hi = 2; // the second 8 bytes of the guid
}

If you get any problems, a fallback approach would be to send it (instead) as a bytes chunk, by adding a shim property. Let me know if you want an example of that.



来源:https://stackoverflow.com/questions/2370090/protobuf-net-serializing-net-guid-how-to-read-this-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!