【发布时间】:2011-12-20 08:25:33
【问题描述】:
首先,我有一个非常简单的java bean,可以很容易地序列化为json:
class Node {
private String text;
// getter and setter
}
Node node = new Node();
node.setText("Hello");
String json = new Gson().toJson(node);
// json is { text: "Hello" }
然后为了让这样的bean有一些动态值,所以我创建了一个“WithData”基类:
Class WithData {
private Map<String, Object> map = new HashMap<String, Object>();
public void setData(String key, Object value) { map.put(key, value); }
public Object getData(String key) = { return map.get(key); }
}
class Node extends WithData {
private String text;
// getter and setter
}
现在我可以为节点设置更多数据:
Node node = new Node();
node.setText("Hello");
node.setData("to", "The world");
但是Gson会忽略“to”,结果还是{ text: "Hello" }。我希望它是:{ text: "Hello", to: "The world" }
有没有办法为WithData 类型编写一个序列化程序,所有类扩展它不仅会生成自己的json 属性,还会生成map 中的数据?
我尝试实现一个自定义的序列化器,但是失败了,因为我不知道如何让Gson先序列化属性,再序列化map中的数据。
【问题讨论】:
-
您是否尝试公开您的地图字段?
-
没用,希望map的key是json的key
标签: json serialization gson