java - 在父类(super class)之后序列化子类?

标签 java gson

我找不到任何关于此的文档,但似乎 Gson 在父类(super class)的字段之前序列化子类的字段:

class G9 {
  static  class B { String s1 = "1"; String s2 = "2"; }
  static class C extends B { String s3 = "3"; }
  public static void main(String args[]) {
    System.out.println(new Gson().toJson(new C()));
  }
}

该程序产生以下输出:

/cygdrive/c/Java/jdk1.8.0/bin/javac -classpath gson-2.1.jar -g G9.java  && /cygdrive/c/Java/jdk1.8.0/bin/java -classpath ".;gson-2.1.jar" G9
{"s3":"3","s1":"1","s2":"2"}

我希望它是以下内容:

{"s1":"1","s2":"2","s3":"3"}

我意识到我可以用 TypeAdapter 来做到这一点但这基本上等于

  • 实现序列化
  • 弄清楚如何将反序列化委托(delegate)给 Gson或者也实现它。

有没有更简单的方法来实现这一目标?我想我正在寻找new FieldOrderingTypeAdapter<C>(C.class, "s1", "s2", "s3")GsonBuilder.setFieldOrder("s1", "s2", "s3")或其他什么。

我正在使用Gson 2.1 .

最佳答案

来自JSON order mixed up :

You cannot and should not rely on the ordering of elements within a JSON object.

From the JSON specification at http://www.json.org/

 An object is an unordered set of name/value pairs

As a consequence, JSON libraries are free to rearrange the order of the elements as they see fit. This is not a bug.

据我所知,没有简单的方法可以解决这个问题。

关于java - 在父类(super class)之后序列化子类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21151189/

相关文章:

java - 替换前 4 个字符的正则表达式

android - HttpURLConnect - 使用 GSON 流的带有 JSON 的 Http PUT 不发送内容

javafx - 如何在 GSON 中反序列化 Kotlin 代表

java - Thymeleaf 显示具有动态列数的表格

java - 通用等同于 Commons BeanUtils 中的 BeanComparator

java - Android 应用程序中 JSON 对象绑定(bind)的替代方案

java - 使用 Gson 将 Java 8 LocalDate 序列化为 yyyy-mm-dd

java - 在Java中解析JSON url

java - 如何使用 REST API 将子对象添加到父对象?

java - 如何使 TreeViewer 跨 ScrolledComposite