2

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

目前我有一个简单的层次结构,由两个类组成:BaseMessagePersonNew. BaseMessage有一个id带有 getter 和 setter 的 Long 字段。PersonNew具有字符串字段nameemail并且继承自BaseMessage.

最初PersonOld类具有该id字段,并且可以很好地序列化/反序列化。但是,当试图从PersonOld(具有id)反序列化到PersonNew类(继承idfrom 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注释,但仍然不起作用。idBaseMessage

尽管具有相同的字段,是否有可能使用不同的类进行反序列化?

问候,

SNK

4

0 回答 0