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

如何在HotChocolate GraphQL中输出属性有序的规范JSON?

解决HotChocolate中返回JSON属性固定顺序的问题

因为HotChocolate使用System.Text.Json进行序列化,要让返回的JSON属性保持指定顺序,有两种常用方式:

方法一:给类属性添加特性(推荐)

直接在SignedOutput类的属性上标记JsonPropertyOrder来指定序列化顺序,同时用JsonPropertyName确保JSON键名符合要求:

using System.Text.Json.Serialization;

public class SignedOutput {
    [JsonPropertyName("deviceId")]
    [JsonPropertyOrder(0)] // 数字越小,序列化时越靠前
    public string DeviceId { get; set; }

    [JsonPropertyName("terminalId")]
    [JsonPropertyOrder(1)]
    public string TerminalId { get; set; }
}

这样不管C#类里属性的定义顺序怎么调整,序列化后的JSON都会严格按照JsonPropertyOrder指定的顺序输出,同时键名也会转换成示例中的小写驼峰格式。

方法二:全局配置System.Text.Json序列化选项

如果需要对所有类型统一配置序列化规则,可以在注册HotChocolate服务时,自定义JsonSerializerOptions:

builder.Services.AddGraphQLServer()
    .AddQueryType<Query>()
    .AddMutationType<Mutation>()
    .ModifyJsonOptions(options => {
        // 全局设置驼峰命名(可选,和上面的JsonPropertyName二选一即可)
        options.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
        // 确保序列化时遵循JsonPropertyOrder的配置
        options.DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull;
    });

注意:如果已经给属性单独标记了JsonPropertyName,全局的PropertyNamingPolicy不会覆盖该属性的自定义名称。

这样配置后,你的SignRequest方法不需要做任何修改,返回的SignedOutput对象序列化后就会保持你需要的属性顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:20:53