通常,要將 protobuf 消息從有線格式轉(zhuǎn)換為 JSON,您只需將有線格式解組為proto.Message動(dòng)態(tài)類型為具體 Go 類型(由 protoc-gen-go 生成),然后使用protojson包將其解組為 JSON。如果您沒有具體的 Go 類型,我想知道如何做同樣的事情,而是一個(gè)protoreflect.MessageDescriptor。描述符應(yīng)該具有解析有線格式并從中構(gòu)造 JSON(或其他格式)所需的所有信息,但我似乎找不到用于此的 API??磥砦倚枰韵聝?nèi)容:func UnmarshalFromWire(b []byte, desc protoreflect.MessageDescriptor) (protoreflect.Message, error)func MarshalToJSON(m protoreflect.Message) ([]byte, error)是否有類似或類似的 API?
1 回答

蝴蝶不菲
TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
該dynamicpb模塊執(zhí)行第一部分(從MessageDescriptor到proto.Message,不是protoreflect.Message)。
func UnmarshalFromWire(b []byte, desc protoreflect.MessageDescriptor) (proto.Message, error) {
m := dynamicpb.NewMessage(desc)
if err := proto.Unmarshal(b, m); err != nil {
return nil, err
}
return m, nil
}
第二部分只是你的標(biāo)準(zhǔn)protojson.Marshal——因?yàn)槟悻F(xiàn)在有一個(gè)完全有效的proto.Message.
- 1 回答
- 0 關(guān)注
- 184 瀏覽
添加回答
舉報(bào)
0/150
提交
取消