我目前正在尝试使用Msgpack对Msgpack反序列化一个对象图,但是我遇到了问题。
目前我有一个由两个类组成的简单层次结构:BaseMessage
和PersonNew
。 BaseMessage
有一个包含getter和setter的Long字段id
。 PersonNew
包含字符串字段name
和email
,并且继承自BaseMessage
。
最初PersonOld
类有id
字段,并且序列化/反序列化很好。但是,当从PersonOld
(具有id
)到PersonNew
类(从id
继承BaseMessage
)进行反序列化时,我正在点击错误:
org.msgpack.MessageTypeException: Unexpected raw value
我正在使用的所有字段都是私有的。
以下是示例代码:
PersonOld personOld = new PersonOld();
personOld.setName("person");
personOld.setEmail("person@email.com");
MessagePack msgpack = new MessagePack();
msgpack.register(PersonNew.class);
msgpack.register(PersonOld.class);
// Serialize using old person class
byte[] personBytes = msgpack.write(personOld);
ByteArrayInputStream in = new ByteArrayInputStream(personBytes);
Unpacker unpacker = msgpack.createUnpacker(in);
// Deserialize using new person class
PersonNew deserializePerson = unpacker.read(PersonNew.class);
我想要反序列化到更新的类的原因是因为我想看看是否可以将较旧的序列化数据(例如在持久化消息队列中)与较新的类兼容(例如,在类的情况下)更新)。我甚至尝试在@Optional
课程的id
上使用BaseMessage
注释,但仍无效。
尽管具有相同的字段,是否可以使用不同的类进行反序列化?
此致
SNK