使用Msgpack(Java API)对不同类进行序列化/反序列化
我目前正在尝试使用Msgpack来使用Msgpack反序列化对象图,但遇到了一些问题 目前,我有一个简单的层次结构,由两个类组成:使用Msgpack(Java API)对不同类进行序列化/反序列化,java,msgpack,Java,Msgpack,我目前正在尝试使用Msgpack来使用Msgpack反序列化对象图,但遇到了一些问题 目前,我有一个简单的层次结构,由两个类组成:BaseMessage和personewBaseMessage有一个带有getter和setter的长字段idpersonew具有字符串字段name和email,并继承自BaseMessage 最初,PersonOld类具有id字段,它可以进行序列化/反序列化。但是,当尝试从PersonOld(具有id)反序列化到personew类(从BaseMessage继承id)
BaseMessage
和personew
BaseMessage
有一个带有getter和setter的长字段id
personew
具有字符串字段name
和email
,并继承自BaseMessage
最初,PersonOld
类具有id
字段,它可以进行序列化/反序列化。但是,当尝试从PersonOld
(具有id
)反序列化到personew
类(从BaseMessage
继承id
)时,我遇到了错误:
org.msgpack.MessageTypeException: Unexpected raw value
我使用的所有字段都是私有的
下面是示例代码:
PersonOld PersonOld=new PersonOld();
personOld.setName(“人员”);
personOld.setEmail(“person@email.com");
MessagePack msgpack=newmessagepack();
msgpack.register(人员类别);
msgpack.register(PersonOld.class);
//使用old person类序列化
byte[]personBytes=msgpack.write(personOld);
ByteArrayInputStream in=新的ByteArrayInputStream(personBytes);
解包解包器=msgpack.createUnpacker(in);
//使用newperson类反序列化
PersonNew反序列化person=解包读取(PersonNew.class);
我想反序列化到较新类的原因是,我想看看是否有可能使较旧的序列化数据(例如,在持久化消息队列中)与较新类兼容(例如,在类更新的情况下)。我甚至尝试在BaseMessage
类的id
上使用@可选的注释,但仍然不起作用
尽管具有相同的字段,但是否可以使用不同的类反序列化
问候,
SNK你的个人职业是什么样的?