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

C#编写GraphQL查询返回结果属性首字母小写问题求助

问题

用C#编写GraphQL查询,Schema已创建且能正常获取数据,但返回结果中属性名首字母会自动转为小写。

Schema代码:

var schema = Schema.For(@"
                type user {
                    Indx: Int,
                    UserName: String,
                    Password: String
                }
                type Query {
                    users: [user]
                }
            ", s => s.Types.Include<Query>());

执行查询(能返回数据但属性首字母小写):

var json = schema.ExecuteAsync( s => { s.Query = "{ users {indx,userName,password} }"; });

返回结果:

{
  "data": {
    "users": [
      {
        "indx": 593,
        "userName": "string",
        "password": "string"
      },
      {
        "indx": 540,
        "userName": "new test user",
        "password": "1234"
      },
      {
        "indx": 598,
        "userName": "wolv",
        "password": "1234"
      }
    ]
  }
}

若改用首字母大写的字段查询:

var json = schema.ExecuteAsync( s => { s.Query = "{ users {Indx,UserName,Password} }"; });

会返回错误:

{
  "errors": [
    {
      "message": "Cannot query field 'Indx' on type 'user'. Did you mean 'indx'?",
      "locations": [
        {
          "line": 1,
          "column": 10
        }
      ],
      "extensions": {
        "code": "FIELDS_ON_CORRECT_TYPE",
        "codes": [
          "FIELDS_ON_CORRECT_TYPE"
        ],
        "number": "5.3.1"
      }
    },
    {
      "message": "Cannot query field 'UserName' on type 'user'. Did you mean 'userName'?",
      "locations": [
        {
          "line": 1,
          "column": 15
        }
      ],
      "extensions": {
        "code": "FIELDS_ON_CORRECT_TYPE",
        "codes": [
          "FIELDS_ON_CORRECT_TYPE"
        ],
        "number": "5.3.1"
      }
    },
    {
      "message": "Cannot query field 'Password' on type 'user'. Did you mean 'password'?",
      "locations": [
        {
          "line": 1,
          "column": 24
        }
      ],
      "extensions": {
        "code": "FIELDS_ON_CORRECT_TYPE",
        "codes": [
          "FIELDS_ON_CORRECT_TYPE"
        ],
        "number": "5.3.1"
      }
    }
  ]
}

期望返回结果(属性首字母大写):

{
  "data": {
    "users": [
      {
        "Indx": 593,
        "UserName": "string",
        "Password": "string"
      },
      {
        "Indx": 540,
        "UserName": "new test user",
        "Password": "1234"
      },
      {
        "Indx": 598,
        "UserName": "wolv",
        "Password": "1234"
      }
    ]
  }
}
解决方案

方法1:全局禁用驼峰命名转换

GraphQL.NET默认会将Schema字段名转换为驼峰格式,通过配置NameConverter为DefaultNameConverter可以保留原始字段名:

var schema = Schema.For(@"
                type user {
                    Indx: Int,
                    UserName: String,
                    Password: String
                }
                type Query {
                    users: [user]
                }
            ", s => {
                s.Types.Include<Query>();
                // 保留原始字段名,不做驼峰转换
                s.NameConverter = new DefaultNameConverter();
            });

之后使用首字母大写的字段名查询:

var json = schema.ExecuteAsync( s => { s.Query = "{ users {Indx,UserName,Password} }"; });

返回的JSON结果字段名将与Schema定义一致,保持首字母大写。

方法2:为单个字段指定输出名称

如果不需要全局修改,可使用@name指令为每个字段指定输出的JSON键名:

var schema = Schema.For(@"
                type user {
                    indx: Int @name(name: ""Indx""),
                    userName: String @name(name: ""UserName""),
                    password: String @name(name: ""Password"")
                }
                type Query {
                    users: [user]
                }
            ", s => s.Types.Include<Query>());

查询时仍使用小写字段名:

var json = schema.ExecuteAsync( s => { s.Query = "{ users {indx,userName,password} }"; });

返回的JSON结果中字段名将是指定的大写格式。

内容的提问来源于stack exchange,提问作者Marwan Abu Ahmad

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:25:31