超类后序列化子类?

时间:2014-01-16 00:30:08

标签: java gson

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

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执行此操作,但这基本上等于

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

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

我正在使用Gson 2.1

1 个答案:

答案 0 :(得分:1)

来自JSON order mixed up

  

你不能也不应该依赖于一个元素的排序   JSON对象。

     

来自http://www.json.org/

的JSON规范
 An object is an unordered set of name/value pairs
     

因此,JSON库可以自由重新排列   他们认为合适的元素。这不是一个错误。

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