В языках со статической типизацией, таких как C #, всякий раз, когда объект где-либо сериализуется, затем изменяется его исходный класс, а затем десериализуется обратно в новый класс, вы, вероятно, столкнетесь с проблемами где-то на линии. Это довольно неизбежно, будь то MongoDB, WCF, XmlSerializer или что-то еще.
У вас обычно есть некоторая гибкость с опциями сериализации , например, с Mongo вы можете изменить имя свойства класса, но при этом сохранить его карту значений на то же имя поля (например, с помощью атрибута BsonElement). Или вы можете указать десериализатору игнорировать поля Mongo, которые не имеют соответствующего свойства класса, используя атрибут BsonIgnoreExtraElements, поэтому удаление свойства не вызовет исключение при загрузке старого поля из Mongo.
В целом, для любых изменений структурной схемы вам, вероятно, потребуется перезагрузить данные или запустить скрипт миграции. Другой альтернативой является использование динамических переменных C #, хотя это не решит основную проблему, вы просто получите меньше ошибок сериализации.