如何让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
相关产品推荐
相关产品推荐

