我正在使用 ObjectMapper 反序列化一个 JSON 对象java中的类。 我得到了不同类型的对象(?扩展了某些东西)并且想知道是否有任何方法可以以某种通用方式对它们进行反序列化。 readValue方法获取输出对象类型的一些类类型对象,因此它是某种强类型的。
最佳答案
Jackson 不仅可以将类型删除的类作为目标类型,还可以将使用通常的“父类(super class)型标记”模式的 TypeReference 作为目标类型。来自 jackson 常见问题解答:
List<MyBean> result = mapper.readValue(src, new TypeReference<List<MyBean>>() { });
这适用于所有类型的通用类型,而不仅仅是 map 和集合。如果您正在考虑泛型类型,则可以这样做;这样您就只有一个类但有多个参数变化。
但听起来您可能真正想要的是支持反序列化多态类型;这也是支持(从 Jackson 1.5 开始,请参阅 http://wiki.fasterxml.com/JacksonPolymorphicDeserialization)。
编辑:给定另一个答案中的示例类,Jackson 的方式是:
import org.codehaus.jackson.annotate.JsonTypeInfo;
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS)
public abstract class Message
{
protected Message(){ }
}
反序列化方式:
Message msg = objectMapper.readValue(json, Message.class);
获取消息的任何子类。并使用“objectMapper.writeValue();”进行序列化
关于java - 通用 JSON 对象转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3386907/