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

如何让StrawberryShake将GraphQL ID解析为数值类型(.NET Maui)

解决StrawberryShake将GraphQL ID标量解析为long类型的问题

步骤1:自定义ID标量转换器

实现IScalarSerializer接口,兼容数字和字符串格式的ID,将其统一解析为long类型:

public class LongIdScalarSerializer : IScalarSerializer
{
    public string Name => "ID";
    public Type Type => typeof(long);

    public object? Deserialize(JsonElement value)
    {
        if (value.ValueKind == JsonTokenType.Number)
        {
            return value.GetInt64();
        }
        else if (value.ValueKind == JsonTokenType.String && long.TryParse(value.GetString(), out var id))
        {
            return id;
        }
        return null;
    }

    public JsonElement Serialize(object? value)
    {
        if (value is long id)
        {
            return JsonSerializer.SerializeToElement(id);
        }
        return JsonElement.ParseValue("null");
    }
}

步骤2:注册标量转换器到客户端

在客户端初始化时,将自定义转换器添加到StrawberryShake的配置中:

builder.Services.AddGraphQLClient<IMyStartGGClient>()
    .ConfigureHttpClient(client => client.BaseAddress = new Uri("https://api.start.gg/gql/alpha"))
    .AddScalarSerializer<LongIdScalarSerializer>();

步骤3:配置代码生成规则

在项目的.graphqlrc.json文件中,指定ID标量对应的CLR类型为long:

{
  "schema": "https://api.start.gg/gql/alpha",
  "documents": "**/*.graphql",
  "extensions": {
    "strawberryShake": {
      "name": "MyStartGGClient",
      "namespace": "StartGG.GraphQL",
      "scalars": {
        "ID": "long"
      }
    }
  }
}

步骤4:重新生成客户端代码

执行以下命令重新生成适配long类型ID的StrawberryShake客户端代码:

dotnet graphql generate

以上配置完成后,StrawberryShake会自动将GraphQL的ID标量解析为long类型,同时兼容返回的数字或字符串格式ID,解决类型不匹配的运行时错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 10:22:38