如何为protobuf添加自定义序列化/反序列化?

use*_*331 5 serialization protocol-buffers deserialization

我的消息定义如下

message ID {
    string value = 1;
}

message User {
    ID id = 1;
    google.protobuf.StringValue name = 2;
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我将 User 的实例序列化为 json,我会得到类似的结果

{
    "id": {
        "value" : "myid"
    }
    "name" : "Josh"
}
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,WKT 类型的值是未嵌套的。但是,对于我的自定义消息类型 User,该值是嵌套的。如何使输出看起来像

{
    "id": "myid"
    "name" : "Josh"
}
Run Code Online (Sandbox Code Playgroud)

我的意思是如何序列化、反序列化为自定义类型。

我能想到的一个选择是更新此函数https://github.com/protocolbuffers/protobuf/blob/master/python/google/protobuf/json_format.py#L199 这意味着,拥有 json_format.py 的副本并扩展 _IsWrapperMessage到我的自定义类型