如何用schema.graphql生成C#类型作为GraphQL.Client查询返回类型?
完全可行,有成熟方案实现
核心思路:通过代码生成工具从你的
schema.graphql文件自动生成对应C#强类型,直接用于GraphQL.Client的泛型查询方法中。具体实现步骤:
用GraphQL Code Generator生成C#类型
这个工具支持从GraphQL Schema生成强类型C#代码,只需简单配置:- 安装必要的依赖包(比如
@graphql-codegen/cli、@graphql-codegen/csharp等) - 编写配置文件(如
codegen.yml),指定schema.graphql的路径、生成类的输出目录,以及字段命名规则(比如把GraphQL的camelCase映射为C#的PascalCase) - 运行生成命令,工具会自动生成包含所有Schema类型的C#类,其中就包含你需要的
EndpointResponse这类查询返回类型。
- 安装必要的依赖包(比如
结合GraphQL.Client使用生成的类型
生成类型后,直接在SendQueryAsync<T>中传入对应的生成类型即可,示例代码:var gqlClient = new GraphQLHttpClient("你的GraphQL端点地址", new NewtonsoftJsonSerializer()); var query = new GraphQLRequest { Query = @" query YourQueryName { // 这里写你的查询字段,要和Schema定义匹配 } " }; var response = await gqlClient.SendQueryAsync<EndpointResponse>(query); // 直接访问强类型的返回数据 var resultData = response.Data;
注意事项
- 当后端Schema更新时,需要重新运行生成命令更新C#类,保证类型一致性
- 如果Schema中有自定义标量类型,要在生成配置中指定对应的C#类型(比如把GraphQL的
DateTime标量映射为C#的DateTime) - 确保生成的类型字段和你编写的查询字段完全匹配,否则会出现反序列化失败的问题
内容的提问来源于stack exchange,提问作者MrIslandWind
相关产品推荐
相关产品推荐

