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

.NET Core/5中GraphQL遇JsonException及Schema文档无法识别问题

问题分析与解决方案

我帮你排查了一下,核心问题和对应的解决步骤如下:

1. 类型命名冲突(最关键的问题)

你定义的Task类和.NET框架内置的System.Threading.Tasks.Task完全重名了!这会导致编译器、GraphQL类型解析器以及Json序列化器都出现混淆,直接引发System.Text.Json.JsonException,同时也会干扰Schema的生成,让GraphiQL无法正确识别。

解决方法:
给你的Task类重命名,比如改成AppTask或者TodoTask,同时对应的TaskType也要同步修改:

// 重命名实体类
public sealed class AppTask { public Guid Id { get; set; } }

// 同步修改Graph类型
public sealed class AppTaskType : ObjectGraphType<AppTask> 
{ 
    public AppTaskType() 
    { 
        Name = nameof(AppTask); 
        Field(task => task.Id).Description("The task id."); 
    } 
}

之后更新Query类和Schema中所有引用Task的地方,确保类型引用正确。

2. 确认GraphQL Schema的正确注册

确保你的GraphQLSchema实现正确包含了Query类型,并且在依赖注入中正确注册:

public class AppSchema : GraphQL.Types.Schema
{
    public AppSchema(IServiceProvider provider) : base(provider)
    {
        Query = provider.GetRequiredService<AppQuery>();
    }
}

// 在ConfigureServices中注册
services.AddSingleton<AppSchema>();
services.AddGraphQL(options =>
{
    options.EnableMetrics = true;
})
.AddSystemTextJson();

3. 检查GraphiQL端点配置

确保在Configure方法中正确映射GraphiQL的端点,让它能访问到Schema:

app.UseGraphiQL("/graphiql", options =>
{
    options.GraphQLEndPoint = "/graphql";
});

同时确认/graphql端点已经正确配置,能处理GraphQL请求。

4. 验证Json序列化配置

使用GraphQL.SystemTextJson时,需要确保序列化器正确处理GraphQL的类型。在注册服务时,AddSystemTextJson()会自动配置,但如果有自定义Json设置,要避免覆盖GraphQL所需的转换器:

services.AddGraphQL(options =>
{
    options.EnableMetrics = true;
})
.AddSystemTextJson(options =>
{
    // 可以在这里添加自定义配置,但保留GraphQL默认转换器
    options.SerializerOptions.PropertyNameCaseInsensitive = true;
});

按照以上步骤修改后,应该能解决JsonException和GraphiQL找不到Schema的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:13:58