提问者:小点点

杰克逊:存储类型信息以及序列化数据


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

序列化很简单

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

然而,在反序列化过程中,将其反序列化为通用对象并不总是有效的(我将它反序列化为通用对象,因为我没有可用的类型信息)

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

Jackson有没有可能将类型信息与序列化字节一起存储,并将相同的信息用于反序列化?


共1个答案

匿名用户

我不知道JSON有没有这个特性,但是你可以很容易地在你的项目中添加这样一个特性。创建一个抽象类,它将有一个方法getClassName()或类似这样的实现

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

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