Jackson:将类型信息与序列化数据一起存储

问题描述

我正在创建一个支持不同序列化类型的缓存库,其中之一是Jackson

序列化很简单

public byte[] serialize(Object data) {
    return objectMapper.writeValueAsBytes(data);
}

但是,在反序列化期间,将其反序列化为通用对象并不总是可行(由于没有可用的类型信息,因此我将其反序列化为通用对象)

public Object deserialize(byte[] serializedData) {
    return objectMapper.readValue(decompressionInputStream,Object.class);
}

Jackson是否有可能将类型信息与序列化字节一起存储并使用相同的信息进行反序列化?

解决方法

我不知道JSON是否具有此功能,但是您可以轻松地在项目中添加这样的功能。创建一个将具有方法getClassName()或类似内容的抽象类 像这样的实现

public String getClassName() {
 return getClass().getCanonicalName();
}

然后让您所有的课程都扩展这个课程。更好的是,如果您使用Java 8或更高版本,则可以将其作为具有默认方法实现的接口。然后,您只会让您的类实现此接口。因此,当您的类要序列化时,它也会存储此属性。