Я бы порекомендовал посмотреть, как ORM (Object Relational Mappers) решают подобные проблемы; в общем, способ, которым они справляются, заключается в том, что репозиторий управляет всей сериализацией / десериализацией по мере необходимости; Существует некоторая относительно сложная логика для десериализации элементов дерева (отложенная загрузка и т. п.). В пространстве ORM были рассмотрены многие из этих проблем, и есть решения, которые учитывают подробности каждого из потенциальных решений, так что это подходящее место для поиска. Для начала рассмотрим, как Hibernate делает свое волшебство; это широко используемый ORM с довольно хорошим дизайном.
В частности, я бы настоятельно рекомендовал не пытаться реализовать подобные вещи самостоятельно; рассмотреть возможность использования ORM (опять же, Hibernate рекомендуется от меня и других) для управления спецификой этого процесса; они работали над многими проблемами, возникающими при выполнении этого материала.