protobuf 提供了反射API,可以很方便操作pb字段。
// 遍历pb字段 bool ParsePb(google::protobuf::Message *oReq, std::map<std::string, std::string> &vParams) { // Descriptor: message类型定义描述 const google::protobuf::Descriptor *descriptor = oReq->GetDescriptor(); // Reflection: 动态读写pb字段 const google::protobuf::Reflection *reflection = oReq->GetReflection(); google::protobuf::FieldDescriptor *field = NULL; int count = descriptor->field_count(); string sKey; string sVal; for (int i=0; i<count; i++) { // 字段 field = descriptor->field(i); sKey = field->name(); switch (field->cpp_type()) { case FieldDescriptor::CPPTYPE_BOOL: sVal = to_string( reflection->GetBool(*oReq, field) ); break; case FieldDescriptor::CPPTYPE_INT32: sVal = to_string( reflection->GetInt32(*oReq, field) ); break; case FieldDescriptor::CPPTYPE_UINT32: sVal = to_string( reflection->GetUInt32(*oReq, field) ); break; case FieldDescriptor::CPPTYPE_INT64: sVal = to_string( reflection->GetInt64(*oReq, field) ); break; case FieldDescriptor::CPPTYPE_UINT64: sVal = to_string( reflection->GetUInt64(*oReq, field) ); break; case FieldDescriptor::CPPTYPE_FLOAT: sVal = to_string( reflection->GetFloat(*oReq, field) ); break; case FieldDescriptor::CPPTYPE_DOUBLE: sVal = to_string( reflection->GetDouble(*oReq, field) ); break; case FieldDescriptor::CPPTYPE_STRING: sVal = reflection->GetString(*oReq, field); break; default: sVal = ""; break; } vParams.insert({sKey, sVal}); } return true; }
开源库pb2json(实现pb与json互转)也是基于反射实现。
相关推荐
本资源提供了一个基于protobuf反射特性的pb结构与json相互转换的实例,该实例程序主要有两个核心函数myMessage2Json、myJson2Message。前者的作用是将pb结构转换成对应的json,后者是将json转换成对应的pb结构体。...
讲述了protobuf的静态编译、通过反射动态创建消息,动态赋值、动态解析消息。
主要介绍了golang 微服务之gRPC与Protobuf的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
基于反射的协议缓冲区该前叉已折叠在 DeDiS 保护伞下。 在这里能找到它:
模块已取代它,该模块包含更新和简化的API,对protobuf反射的支持以及许多其他改进。 我们建议新代码使用google.golang.org/protobuf模块。 版本V1.4及更高版本的github.com/golang/protobuf在方面实现google....
它已被google.golang.org/protobuf模块所取代,该模块包含更新和简化的API,对protobuf反射的支持以及许多其他改进。 我们建议新代码使用google.golang.org/protobuf模块。 github.com/golang/protobuf的v1.4及更高...
在 Maven 中心可用: 简化使用协议缓冲区反射机制的库,不需要 protoc 编译器。 支持主要的 protobuf 特性:原始类型、复杂和嵌套类型、标签、默认值等动态模式创建 - 在运行时从模式创建动态消息模式合并模式序列...
包含嵌入式反射元数据(通常是C ++,有时是Java和大多数其他绑定)的二进制文件, 使用JsProtoUrl运行时的Web应用程序。 通过方便的图形界面来编辑,重放和模糊化发送到Protobuf网络端点的数据,该界面允许您实时...
生成的代码不使用反射,代码混淆后即可工作。 高级功能 这些功能是此项目的本地功能。 它们会影响您如何使用生成的代码。 它不会影响最终的电汇格式。 任何其他协议缓冲区实现都应该能够使用相同的.proto规范进行...
grpcall grpcall是具有反射模式的客户端库轻松请求GRPC服务器,然后它使grpc代理模式中间件(如grpc...将protobuf动态转换为json,并将json动态转换为protobuf grpc客户端管理器,支持流recv系统信号以更新新的描述符。
验证功能是代码生成的,因此不会因对嵌套消息的基于标签的反射而影响性能。 要求 目前已验证使用Protobuf验证程序可与以下各项一起使用: 转到1.11、1.12、1.13 @ v3.8.0 @ v1.3.2 @ v1.3.0 它应该仍然可以...
[1]性能优势在很大程度上取决于用例和消息格式,但与Protobuf-Java 3.9.1 ,大多数常见用例在编码和解码速度方面的性能提升大约是 2 倍。 有关更多信息,请参阅 部分。 运行时库 您可以在 Maven Central 上的以下...
此编译器生成的代码基于生成的优化代码,尽管此包不是原始gogo编译器的 fork,因为它已被实现以支持新的 ProtoBuf APIv2 包。 可用功能 vtprotobuf被实现为一个辅助插件,必须与上游protoc-gen-go生成器一起运行,...
ProtoBuf.Rpc.js:使用协议缓冲区JavaScript轻量级RPC JavaScript( JS )库允许使用Google的创建消息,该消息除了可以指定消息外,还可以指定远程过程调用( RPC )服务:但是,开发人员有责任提出实际的请求。 ...
协议缓冲区和gRPC反射 此为(简称“ protobufs”)和提供了反射API。 protobufs中反射的核心是。 描述符本身就是protobuf消息,它描述.proto源文件或其中的任何元素。 因此,描述符的集合可以描述protobuf类型的...
依赖libevent:2.0.21稳定protobuf:2.5.0 gflags:2.1.1 glog:0.3.3特征快速,轻松,跨平台的I / O事件React器计时器管理后门支持标准开始/停止/重新加载过程管理基于ProtoBuf消息反射的异步RPC支持连接器基于...
它通过访问gRPC服务公开的反射API读取protobuf服务定义,并将HTTP和JSON请求动态转换为gRPC调用。 创建gRPC Mate的目的是提供一种非常轻松地从gRPC服务器提供HTTP和JSON的方式,而无需共享protobuf定义文件,没有...
运行时库自动生成类的访问者代码,运行时库将生成的代码用于Kotlin多平台/多格式无反射序列化Kotlin序列化包括一个编译器插件,它为可序列化的类,具有核心序列化API和JSON格式的运行时库,以及具有ProtoBuf,CBOR和...
支持导出proto描述信息值到lua / javascript代码和json / xml数据(支持自定义插件,方便用户根据proto描述自定义反射功能) 支持导出UnrealEngine支持的json或csv格式,支持自动生成和导出UnrealEngine的DataTable...
sbt-swagger-2 该项目已存档。 我通常不再使用swagger-core ,对此我感到非常高兴,并且我不再支持此插件。 如果您有兴趣使用它,并且需要一些修改,建议对... 基于注释的Swagger生成器使用运行时反射-对于某些人来说