【发布时间】:2013-01-28 04:55:05
【问题描述】:
假设我有一个用 Java 实现的参数化树,如下所示:
public class Tree<E> {
private static class Node {
E element;
List<Node> children.
}
Node root;
//... You get the idea.
}
这里的想法是,上面的实现只关心树的拓扑结构,而不知道将通过实例化存储在树中的元素。
现在,假设我希望我的树元素是地理。它们按树组织的原因是因为大陆包含国家,国家包含州或省,等等。为简单起见,地理具有名称和类型:
public class GeoElement { String name; String type; }
所以,地理层次结构最终看起来像这样:
public class Geography extends Tree<GeoElement> {}
现在到 Jackson 序列化。假设 Jackson 序列化器可以看到字段,则此实现的直接序列化将如下所示:
{
"root": {
"element": {
"name":"Latin America",
"type":"Continent"
}
"children": [
{
"element": {
"name":"Brazil",
"type":"Country"
},
"children": [
// ... A list of states in Brazil
]
},
{
"element": {
"name":"Argentina",
"type":"Country"
},
"children": [
// ... A list of states in Argentina
]
}
]
}
这种 JSON 渲染并不好,因为它包含来自 Tree 和 Node 类的不必要的工件,即“根”和“元素”。我需要的是这个:
{
"name":"Latin America",
"type":"Continent"
"children": [
{
"name":"Brazil",
"type":"Country"
"children": [
// ... A list of states in Brazil
]
},
{
"name":"Argentina",
"type":"Country"
"children": [
// ... A list of states in Argentina
]
}
]
}
非常感谢任何帮助。 -伊戈尔。
【问题讨论】:
-
感谢您的建议,斯里尼瓦斯。它不起作用,因为我不想忽略节点,只想丢弃节点包装器。
-
你找到解决办法了吗,如果有请更新
-
@anon StaxMan 提供的解决方案不行吗?
-
我在类中没有根节点。节点 -> 数据,List
结构。在这里我必须创建一个单独的节点序列化程序并编写递归代码来完成它,
标签: java json generics jackson