java序列化ArrayList<Objects>并返回,保留类
我正在尝试将不同对象的集合发送到接受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,根据属性手动确定它的真实类,并手动反序列化为对象
方案C:
- 将每种类型的对象放入具有特定类型的不同集合中李>
- 序列化三个集合,并使用特定拆分器将它们组合成一个字符串
- 按相反的顺序反序列化回来李>
解决方案是:
只需在写入字符串之前添加映射器设置:Utils.getObjectMapper().enableDefaultTyping(ObjectMapper.DefaultTyping.JAVA_LANG_OBJECT).writeValueAsString(objects);
感谢@dmitry zvorygin
# 1 楼答案
多态(反)序列化是您所需要的全部- https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization
确保所有实体都有基类