Воля права, проблема в том, что существует бесконечный путь для сохранения. Вы можете решить эту проблему, не сохраняя родителя. Вы можете установить родителя, когда читаете из JSON-объекта. Чтобы избежать сохранения родителя, просто установите его как временный.
public class TreeNode {
private transient TreeNode parent;
private ArrayList<TreeNode> children;
private Object value;
//methods
}
При обратном преобразовании в POJO вы вызываете метод setParent ниже.
TreeNode newRoot = gson.fromJson(treeJson, TreeNode.class);
setParents(newRoot);
Метод setParents просто проходит по всем дочерним узлам и устанавливает их родителей в узел, у которого этот узел является дочерним.
private void setParents(TreeNode root) {
for (TreeNode node : root.getChildren()) {
node.setParent(root);
setParents(node);
}
}