我需要在protobuf(proto3语法)中指定带有可选字段的消息.就proto 2语法而言,我想表达的信息是这样的:
message Foo {
required int32 bar = 1;
optional int32 baz = 2;
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,"可选"概念已从语法proto 3(以及所需概念)中删除.虽然不清楚替代方法 - 使用默认值来声明尚未从发送方指定字段,但如果默认值属于有效值域,则会留下歧义(例如考虑布尔类型).
那么,我应该如何对上面的消息进行编码?谢谢.
如何处理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)
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
看起来多余.
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
我想让 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 中是否有传统的方法来实现这一点?或者,可能是一种非常规的方式?
根据手册,Protobuf 3.0.0支持JSON序列化:
JSON 中定义良好的编码,作为二进制原始编码的替代方案。
我尝试过什么
json.dumps(instance)
这提出了TypeError(repr(o) + " is not JSON serializable")
instance.to_json()
(或类似的)功能如何将 Python 原型对象序列化为 JSON?