Python Protobuf不';t序列化默认值

Python Protobuf不';t序列化默认值,python,protocol-buffers,Python,Protocol Buffers,我正在为python使用Protobuf 我一直试图使用默认值,但每次运行SerializeToString()时,我都一无所获 比如说, 这是我的.proto文件对象 message Test{ optional string lol = 1 [default="HI"]; optional int32 num = 2 [default=200]; } 我跑 得到 200用于打印(test.num) 但是SerializeToString()没有结果(空) 我希望将默认值序

我正在为python使用Protobuf

我一直试图使用默认值,但每次运行SerializeToString()时,我都一无所获

比如说,

这是我的.proto文件对象

message Test{

    optional string lol = 1 [default="HI"];
    optional int32 num = 2 [default=200];
}
我跑

得到 200用于打印(test.num) 但是SerializeToString()没有结果(空)

我希望将默认值序列化

你知道怎么做吗


提前谢谢

这正按预期工作。默认值不会通过导线发送。相反,接收端假定如果字段不存在,则应使用默认值。这通过不发送公共值来节省导线上的空间。这意味着客户端和服务器必须就默认值达成一致;通常不应更改
.proto
文件中的默认值


请记住,默认值的主要用途是能够处理来自在字段存在之前构建的旧客户端的消息。因此,这些客户端显然无法在线路上发送默认值,因为他们对此一无所知。

对于任何使用Protobuf 3的用户,有一种方法可以使用
包括\u default\u value\u字段
参数对默认值进行序列化,或者:


有没有办法在
proto2
上执行此操作?
test = packets_pb2.Test()
print(test.num)
print(test.SerializeToString())
from google.protobuf.json_format import MessageToJson

serialized_message_with_defaults = MessageToJson(
    protobuf_instance,
    including_default_value_fields=True,  # this does it
)