通常,要将原始消息从有线格式转换为JSON,只需将有线格式解封为一个proto.Message,其动态类型为具体的Go类型(由package go生成),然后使用protojson包将其解封为JSON。
如果没有具体的Go类型,而是一个protoreflect.MessageDescriptor类型,我想知道如何做同样的事情。描述符应该拥有解析有线格式和从它构造JSON (或其他格式)所需的所有信息,但我似乎找不到相应的API。我似乎需要以下几点:
func UnmarshalFromWire(b []byte, desc protoreflect.MessageDescriptor) (protoreflect.Message, error)
func MarshalToJSON(m protoreflect.Message) ([]byte, error)有类似的API吗?
发布于 2020-08-06 21:33:03
dynamicpb模块完成第一部分(从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
}第二部分只是您的标准protojson.Marshal --因为您现在有了一个完全有效的proto.Message。
https://stackoverflow.com/questions/63197038
复制相似问题