在java中,是否可以将Serializable接口添加到在运行时没有它的类?

Kyl*_*yle 6 java serialization

有一个我想序列化的类,它实现了Serializable,但它包含的一个对象没有实现Serializable.

有没有办法在运行时修改类以使其实现Serializable接口,以便我可以序列化它?我无法在编译时更改它,因为它是第三方库.

也许我将不得不使用某种字节码编写器或什么?

编辑:包含类和包含类都在第三方库中,所以我不认为我可以标记为瞬态.包含的类标记为可序列化,但它包含的对象不是.

我为这个类编写自定义序列化方法很好,但不知道我会怎么做,我是否必须使用反射来获取私有变量的值?

bma*_*ies 5

阅读Serializable的javadoc,我看到:

在序列化和反序列化过程中需要特殊处理的类必须使用这些精确签名实现特殊方法:

private void writeObject(java.io.ObjectOutputStream out)
     throws IOException
 private void readObject(java.io.ObjectInputStream in)
     throws IOException, ClassNotFoundException;
 private void readObjectNoData() 
     throws ObjectStreamException;
Run Code Online (Sandbox Code Playgroud)

您可以使用它来手动序列化不合作的字段.你可以考虑使用ASM,但似乎很难相信它是一个可维护的解决方案.