繁体   English   中英

序列化ArrayList <Objects> 回来,保存类

[英]Serialize ArrayList<Objects> and back, preserving class

我正在尝试将不同对象的集合发送到接受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!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM