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

Protobuf gRPC枚举字符串值获取及Postman与C#兼容问题

gRPC枚举反序列化默认值问题解决

问题背景

使用Grpc.AspNetCore 2.53.0 + .NET Core 7.0.5,proto中定义的BookStatus枚举在Postman中提示用字符串值(如"bookStatus": "IDEA"),但C#接收后始终是默认值0,传数字也无效。

解决方案

1. 配置gRPC JSON转码的枚举处理

在Program.cs中注册gRPC服务时,添加JSON转码配置,指定枚举用字符串序列化/反序列化,和Postman的提示格式对齐:

builder.Services.AddGrpc()
    .AddJsonTranscoding(options =>
    {
        // 保持proto字段名不变,不转驼峰
        options.JsonOptions.PropertyNamingPolicy = null;
        // 添加字符串枚举转换器,支持字符串和数字两种格式解析
        options.JsonOptions.Converters.Add(new JsonStringEnumConverter());
    });

2. 确认项目proto编译配置

检查.csproj文件中Protobuf的编译设置,确保正确生成服务端代码:

<ItemGroup>
  <Protobuf Include="Protos\你的proto文件名.proto" GrpcServices="Server" />
</ItemGroup>

3. 测试两种传值格式

配置完成后,Postman中两种传值方式都能正确解析:

  • 字符串形式:"bookStatus": "PUBLISHED"
  • 数字形式:"bookStatus": 7

4. 排查自定义分部类问题

如果你的业务类继承了生成的基分部类,检查是否在自定义代码中错误覆盖了BookStatus属性的赋值逻辑,确保直接使用基类生成的属性,不要手动设置默认值。

内容的提问来源于stack exchange,提问作者ricardosmg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:05:31