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

时间:2014-02-06 11:51:35

标签: java msgpack

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

目前我有一个由两个类组成的简单层次结构:BaseMessagePersonNewBaseMessage有一个包含getter和setter的Long字段idPersonNew包含字符串字段nameemail,并且继承自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

0 个答案:

没有答案