使用循环依赖项序列化现有Java对象

使用循环依赖项序列化现有Java对象,java,serialization,jax-rs,Java,Serialization,Jax Rs,我有一个无法修改的类中的对象 对象具有循环依赖关系 我想序列化该对象,但我无法访问java源代码,因为它位于库中 在C++中,我可以创建一个子类,重写虚拟方法,然后向下绘制以获得所需的行为。在Java中,这是不可能的 除了创建一个新的POJO类并手动复制每个字段之外,我还有什么选择呢?使用Serializable进行序列化有点难闻。我更喜欢使用外部序列化程序,使用JSON(例如)或二进制格式(例如)。无论哪种方式,您都可以用所有这些方式编写自定义序列化程序来解决循环依赖关系。我会选择,即使您将是

我有一个无法修改的类中的对象

对象具有循环依赖关系

我想序列化该对象,但我无法访问java源代码,因为它位于库中

在C++中,我可以创建一个子类,重写虚拟方法,然后向下绘制以获得所需的行为。在Java中,这是不可能的


除了创建一个新的POJO类并手动复制每个字段之外,我还有什么选择呢?

使用Serializable进行序列化有点难闻。我更喜欢使用外部序列化程序,使用JSON(例如)或二进制格式(例如)。无论哪种方式,您都可以用所有这些方式编写自定义序列化程序来解决循环依赖关系。

我会选择,即使您将是唯一一个读取/写入对象的人。许多优点,包括:

  • 诊断/调试序列化JSON使生活变得简单
  • 坚持走这条人迹罕至的道路意味着任何问题的解决方案都离谷歌很远,例如

  • 因此,我认为对象是不可序列化的。不,它不是……您可以使用反射和递归复制所有字段,同时使用
    标识hashmap
    解析循环。但是,我确信,已经有人这样做了:如何在不注释类的情况下解析循环依赖关系?我列出的所有技术都支持外部序列化程序来解析依赖关系。如何实现这一点取决于您自己,但示例是将对象列表序列化为对象ID列表,然后通过从持久性层加载这些ID来再次反序列化这些对象。是否有示例?没有,但我链接到的那些网站是这样做的。