.NET 7 gRPC JSON转码中如何注册Any元素关联的myRequestPayload类型?
在.NET 7 gRPC JSON转码中注册Any类型关联的自定义消息类型
要解决gRPC服务无法识别Any元素中自定义类型的问题,需要将myRequestPayload的类型描述符注册到gRPC JSON转码的类型注册表中,具体步骤如下:
获取自定义消息类型的描述符
由proto文件生成的.NET类会包含静态的Descriptor属性,比如MyRequestPayload.Descriptor(类名对应proto中定义的myRequestPayload消息名)。创建并配置TypeRegistry
使用TypeRegistry.FromMessages方法,将需要识别的自定义类型描述符传入,生成包含该类型的注册表。将TypeRegistry关联到gRPC JSON转码配置
在服务配置时,为JSON转码指定我们创建的类型注册表。
示例代码
// 注册自定义消息类型到TypeRegistry var customTypeRegistry = TypeRegistry.FromMessages( MyRequestPayload.Descriptor ); // 配置gRPC服务及JSON转码 builder.Services.AddGrpc() .AddJsonTranscoding(options => { // 让JSON转码使用自定义的类型注册表 options.JsonSettings.TypeRegistry = customTypeRegistry; });
如果需要注册多个自定义类型,只需将多个描述符添加到FromMessages的参数列表中:
var customTypeRegistry = TypeRegistry.FromMessages( MyRequestPayload.Descriptor, OtherCustomPayload.Descriptor );
注意事项
- 确保所有关联的proto文件都已正确生成.NET代码,且项目已引用对应的生成类。
- 验证请求中的
@type字段值(如type.googleapis.com/myRequestPayload)与proto中定义的消息全名完全匹配,避免因名称不一致导致识别失败。
内容的提问来源于stack exchange,提问作者ngruson
相关产品推荐
相关产品推荐

