如何在 Gson 序列化中保持字段序列

2022-09-01 00:05:31

似乎生成具有对象的随机分布字段的JSON代码。有没有办法以某种方式修复字段顺序?Gson.toJson(Object object)

public class Foo {
    public String bar;
    public String baz;
    public Foo( String bar, String baz ) {
        this.bar = bar;
        this.baz = baz;
    }
}
Gson gson = new Gson();
String jsonRequest = gson.toJson(new Foo("bar","baz"));

字符串 jsonRequest 可以是:

  • { "bar":"bar", "baz":"baz" }(正确)
  • { "baz":"baz", "bar":"bar" }(顺序错误)

答案 1

您需要创建自定义 JSON 序列化程序。

例如:

public class FooJsonSerializer implements JsonSerializer<Foo> {

    @Override
    public JsonElement serialize(Foo foo, Type type, JsonSerializationContext context) {
        JsonObject object = new JsonObject();
        object.add("bar", context.serialize(foo.getBar());
        object.add("baz", context.serialize(foo.getBaz());
        // ...
        return object;
    }

}

并按如下方式使用它:

Gson gson = new GsonBuilder().registerTypeAdapter(Foo.class, new FooJsonSerializer()).create();
String json = gson.toJson(foo);
// ...

这将保持您在序列化程序中指定的顺序。

另请参阅:


答案 2

如果 GSON 不支持字段顺序的定义,则还有其他库支持该定义。例如,Jackson 允许使用 @JsonPropertyOrder 来定义它。必须指定自己的自定义序列化程序对我来说似乎是一项非常繁重的工作。

是的,我同意根据JSON规范,应用程序不应该期望字段的特定排序。