C#中用 protobuf Struct 实现弱类型的json 序列化/反序列化

目标

    在.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 正解

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值