目标
在.net 大力支持使用 gRPC 的背景下,通过 jsontranscoding 可以实现 gRPC/WebAPI 一鱼两吃。有时候不想把json对象的所有属性都在 proto 中定义出来,比如设备对象,不同设备有不同的属性,要都强类型那C#里面的对象属性会很多,不如把这些属性打包成一个json字符串,在后端作为整体进行读写,数据库里面只需要一列(如Attrs),里面存储这个json对象即可。
简而言之,我们需要一个相当于object的 protobuf 类型。
map 不行
protobuf 里面的 map等价于 repeated MapFieldEntry,因此不支持 repeated map,即不能表达List<object>,另外map 里面值的类型不能混,因此map ≠ object。
Any 不行
Any应该被视为C#里的强类型,只能pack/unpack另一个message,本身不能添加属性,也不能直接进行json的反序列化。我理解Any=IMessage,需要你提供一个具体的message类型,因此也不是弱类型。
Struct 正解

最低0.47元/天 解锁文章
3773

被折叠的 条评论
为什么被折叠?



