我正在尝试将不同对象的集合发送到接受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!
答案 0 :(得分:1)
多态(反)序列化是您所需要的- https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization
只需确保您具有所有实体的基类即可。