После того, как вы сериализовали и поделились / сохранили эти данные, у вас, по сути, есть контракт. Поэтому, если вы предвидите какие-либо проблемы с версионированием модели, я бы создал отдельную модель DTO для целей сериализации. Затем вы можете перезагрузить данные в DTO, даже если ваша модель DB изменится. Очевидно, вам необходимо отобразить модель DB в / из модели DB, но обычно это довольно тривиально.
Короче, я думаю, что проблема заключается в двойном использовании модели:
DB <===> Model <==> storage
Когда лучше работает следующее:
DB <===> DB Model <==*==> DTO Model <===> storage
Теперь вы можете работать с версионированием модели БД отдельно, подправив код, указанный в ссылке, помеченной *
Вы можете также обрабатывать изменения хранилища в этом сценарии или даже поддерживать несколько моделей DTO (либо для разных целей, либо для разных / несовместимых ревизий).
Всякий раз, когда сериализация становится сложной, обычно самое простое решение: ввести DTO