【发布时间】:2016-08-10 07:28:18
【问题描述】:
让我们举这个例子。我有一个 pojo 类如下。
public class MyRecord{
private String name;
private String id;
//constructors and getters,setters
}
当我得到上面的 toJson(new MyRecord("MyName","myId") 输出时,我可以得到。
{
"name": "MyName",
"id": "123"
}
我继承了一个如下添加日期时间。
public class MyRecordWithDateTime extends MyRecord{
private String DateTime;
//constructors and getters,setters
}
所以当我打电话给 toJson(new MyRecordWithDateTime("2016-01-01", "MyName", "myId"))
输出是这样的
{
"name": "MyName",
"id": "123",
"dateTime": "2016-01-01"
}
但我实际上需要如下。 (dateTime 应该排在第一位。)
{
"dateTime": "2016-01-01",
"name": "MyName",
"id": "123"
}
有没有办法通过保持继承来做到这一点?
【问题讨论】:
-
对象字段/成员没有顺序(也不应该)。如果您需要订购的成员,您应该使用列表/数组结构
-
@RichardH 如果您仔细观察过,Json.toJson() 按 getter 提取字段并完全遵循 getter 的顺序。即,如果您跳过某个字段的吸气剂,它将不会出现。我问这个的原因是,我想知道至少有没有注释。
-
依赖于类中 getter 的编写顺序是糟糕的设计。你最好按照你想要的顺序自己调用吸气剂
-
但这就是 JSON.toJson() 的工作原理。这是库实现,我对此无能为力。更改顺序的问题是“我怎样才能为继承的类做到这一点?”就像我的例子一样。它首先提取父类 getter。
-
但这就是我的观点:类字段没有顺序。如果您希望对字段或值进行排序,则需要使用具有顺序的数据结构,即某种数组、列表或有序散列。