Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Msgpack(Java API)对不同类进行序列化/反序列化_Java_Msgpack - Fatal编程技术网

使用Msgpack(Java API)对不同类进行序列化/反序列化

使用Msgpack(Java API)对不同类进行序列化/反序列化,java,msgpack,Java,Msgpack,我目前正在尝试使用Msgpack来使用Msgpack反序列化对象图,但遇到了一些问题 目前,我有一个简单的层次结构,由两个类组成:BaseMessage和personewBaseMessage有一个带有getter和setter的长字段idpersonew具有字符串字段name和email,并继承自BaseMessage 最初,PersonOld类具有id字段,它可以进行序列化/反序列化。但是,当尝试从PersonOld(具有id)反序列化到personew类(从BaseMessage继承id)

我目前正在尝试使用Msgpack来使用Msgpack反序列化对象图,但遇到了一些问题

目前,我有一个简单的层次结构,由两个类组成:
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

你的个人职业是什么样的?