我找不到任何关于此的文档,但似乎 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
.
最佳答案
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/