【发布时间】:2016-08-15 03:43:00
【问题描述】:
我正在使用 Jackson 来序列化异构列表。我的清单是这样声明的:
List<Base> myList = new LinkedList<>();
我在里面有 Aggregate 和 Source 的课程:
myList.add(new Aggregate("count"));
myList.add(new Aggregate("group"));
myList.add(new Source("reader"));
这些类都实现了Base 接口。每个类只有一个带有 get/set 方法的属性:Aggregate 有“类型”,Source 有“名称”。
我使用这段代码尝试序列化列表:
ObjectMapper om = new ObjectMapper();
om.configure(SerializationFeature.INDENT_OUTPUT, true);
StringWriter c = new StringWriter();
om.writeValue(c, myList);
System.out.println(c);
但我发现输出的 JSON 没有任何指示什么类型的对象被序列化:
[ {
"type" : "count"
}, {
"type" : "group"
}, {
"name" : "reader"
} ]
因此,我认为我不可能对流进行反序列化并使其按预期工作。如何在异构集合中包含有关每个对象的序列化表示的类信息,以便可以正确反序列化集合?
【问题讨论】:
-
绝对不是重复的,因为另一个问题不涉及集合类。
-
正如您所注意到的,问题在于“输出 JSON 没有任何指示什么类型的对象被序列化”。这正是链接问题的意义所在,因此它的答案也解决了您的问题。
-
好的,实际上它只包含大部分的答案。所以我会写剩下的。
标签: java json serialization jackson