序列化ArrayList <objects>并返回,保留类

时间:2018-07-19 02:19:48

标签: java json jackson

我正在尝试将不同对象的集合发送到接受Json对象的服务器。找出哪种方法是最佳的方法。

计划A: 序列化一组对象,如下所示:

ArrayList<Object> objects = new ArrayList<>();
objects.put(new Human("Johhny"));
objects.put(new Cannon(13));
objects.put(new Hamburger(1.3));
String json = Utils.getObjectMapper().writeValueAsString(objects);

序列化工作正常,当我必须反序列化时,我也收到对象数组(精确地说,是链接的哈希映射)。问题是,我不知道这些是人类,大炮还是汉堡包。

有什么方法可以将对象的类名放入json中,因此在反序列化时,对象映射器知道要使用哪个类?

计划B: 解析每个LinkedHashMap,根据属性手动确定其为真正的Class,然后手动反序列化为对象

计划C:

  • 将每种类型的对象放入特定类型的不同集合中。
  • 序列化三个集合,并使用特定的分隔符将它们组合成一个字符串
  • 以相反的顺序反序列化。

解决方案是:

在写入字符串Utils.getObjectMapper().enableDefaultTyping(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT).writeValueAsString(objects);之前只需添加映射器设置

感谢@ dmitry-zvorygin!

1 个答案:

答案 0 :(得分:1)

多态(反)序列化是您所需要的- https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization

只需确保您具有所有实体的基类即可。