如何修改gRPC proto定义,使C#中settings支持简洁多类型键值对?
问题解决方法
你当前用map<string, google.protobuf.Value>的问题在于,google.protobuf.Value作为通用值类型,序列化到JSON时会带上类型标识字段(比如数字是{"number_value": 4}),导致输出不是你想要的简洁格式。
要实现你期望的"settings": {"abc":4, "def":"some_string"}这种原生JSON对象格式,直接改用google.protobuf.Struct类型即可——它的设计就是用来映射标准JSON对象的,序列化时会自动展开成简洁的键值对结构。
修改后的Proto定义
import "google/protobuf/struct.proto"; // 你的主消息体定义 message YourMessage { // 替换原来的map定义 google.protobuf.Struct settings = 3; }
效果说明
使用Struct类型后,序列化到JSON就会直接输出你想要的格式:
"settings": { "abc": 4, "def": "some_string" }
需要注意的是,这个特性要求Protobuf版本在3.10及以上,确保你的开发环境和依赖包满足版本要求。
内容的提问来源于stack exchange,提问作者Mihai Alexandru-Ionut
相关产品推荐
相关产品推荐

