Я думаю, это зависит от того, что вам нужно. Давайте посмотрим варианты:
1) Незамедлительно заброшен! Я даже не буду оправдывать :)
2) Если вам нужна простая, быстрая настойчивость с одним методом, придерживайтесь ее. Будет сохранен полный граф данных как есть! Остерегайтесь того, как долго вы будете обслуживать сохраняемые объекты. Как вы сами отметили, управление версиями может быть проблемой.
3) Медленнее, чем (2), требуется дополнительный код и может быть отредактировано пользователем. Я хотел бы использовать только те данные, которые предполагается использовать клиенту на другом языке.
4) Если вам все равно придется запрашивать данные, придерживайтесь решения БД.
Ну, я думаю, вы уже ответили на свой вопрос:)