You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 16:22:18