标签: protocol-buffers-3

如何在protobuf 3中定义可选字段

我需要在protobuf(proto3语法)中指定带有可选字段的消息.就proto 2语法而言,我想表达的信息是这样的:

message Foo {
    required int32 bar = 1;
    optional int32 baz = 2;
}
Run Code Online (Sandbox Code Playgroud)

根据我的理解,"可选"概念已从语法proto 3(以及所需概念)中删除.虽然不清楚替代方法 - 使用默认值来声明尚未从发送方指定字段,但如果默认值属于有效值域,则会留下歧义(例如考虑布尔类型).

那么,我应该如何对上面的消息进行编码?谢谢.

protocol-buffers protocol-buffers-3

61
推荐指数
6
解决办法
5万
查看次数

协议缓冲区中的继承

如何处理Google Protocol Buffers 3.0中的继承?

Java等效代码:

public class Bar {
    String name;
}
public class Foo extends Bar {
    String id;
}
Run Code Online (Sandbox Code Playgroud)

什么是Proto等效代码?

message Bar {
    string name = 1;
}
message Foo {
    string id = 2;
}
Run Code Online (Sandbox Code Playgroud)

java protocol-buffers protocol-buffers-3

25
推荐指数
2
解决办法
2万
查看次数

Protobuf3:如何描述重复字符串的映射?

有关地图类型官方文档说:

map<key_type, value_type> map_field = N;

...其中key_type可以是任何整数或字符串类型(因此,除了浮点类型和字节之外的任何标量类型).value_type可以是任何类型.

我想定义一个map<string, repeated string>字段,但它对我来说似乎是非法的libprotoc 3.0.0,它抱怨Expected ">".所以我想知道是否有任何方法可以将重复的字符串放入地图中.

可能的解决方法可能是:

message ListOfString {
    repeated string value = 1;
}

// Then define:
map<string, ListOfString> mapToRepeatedString = 1;
Run Code Online (Sandbox Code Playgroud)

但这ListOfString看起来多余.

protocol-buffers protocol-buffers-3

11
推荐指数
2
解决办法
1万
查看次数

在 C# Visual Studio 中编译协议缓冲区 3 时间戳类型?

Visual Studio 2015 
C#
NuGet Packages : 
Google.Protobuf v3.0.0 
Google.Protobuf.Tools v3.0.0
Run Code Online (Sandbox Code Playgroud)

消息类型 Quake

syntax = "proto3";
import "google/protobuf/timestamp.proto";
message Quake {
  google.protobuf.Timestamp _timestamp = 1;
  double magnitude = 2;
}
Run Code Online (Sandbox Code Playgroud)

timestamp.proto 包含在同一个文件夹中

protoc 3.0.2 命令行编译成功

但是VS右键单击proto文件并选择“运行自定义工具”失败,错误“自定义工具'ProtoBufTool'失败。”

从 Visual Studio 中生成 C# 类?

c# timestamp protocol-buffers protobuf-csharp-port protocol-buffers-3

5
推荐指数
1
解决办法
3019
查看次数

有没有办法让生成的枚举在 Protobuf v3 中实现自定义接口?

我想让 Proto3 中生成的枚举实现一个自定义的预先存在的接口,如下所示:

public enum GeneratedProtoEnum
      implements CustomInterface, com.google.protobuf.ProtocolMessageEnum {

    // ...
}
Run Code Online (Sandbox Code Playgroud)

(默认情况下,枚举仅实现com.google.protobuf.ProtocolMessageEnum)。

对于消息,可以通过message_implements:插入点实现类似的功能。

但是enum-s没有这样的选择。

在 Protobuf 中是否有传统的方法来实现这一点?或者,可能是一种非常规的方式?

java protocol-buffers protoc protocol-buffers-3

5
推荐指数
0
解决办法
139
查看次数

Protobuf3:将 Python 对象序列化为 JSON

根据手册,Protobuf 3.0.0支持JSON序列化:

JSON 中定义良好的编码,作为二进制原始编码的替代方案。

我尝试过什么

  • json.dumps(instance)这提出了TypeError(repr(o) + " is not JSON serializable")
  • 寻找一个instance.to_json()(或类似的)功能
  • 搜索了Python文档

如何将 Python 原型对象序列化为 JSON?

python serialization json protocol-buffers-3

3
推荐指数
1
解决办法
5864
查看次数