Существует два основных способа обработки преобразования событий. И то, и другое происходит во время десериализации события:
Вы можете добавлять новые классы с номерами версий (SomethingHappened, SomethingHappened2, SomethingHappened3). Десериализатор создаст и заполнит класс, передаст его конвертеру для получения того же события в его более высокой версии, здесь SomethingHappened3.
Одна из проблем заключается в том, что вам придется обновить также обработчики событий, чтобы использовать последнюю версию события.
Чтобы смягчить это, вы можете использовать соглашение, согласно которому SomethingHappened всегда является последней версией. При переходе к v2 переименуйте SomethingHappened в SomethingHappened1 и создайте SomethingHappened, который будет v2. Для этого вам нужно иметь контроль над классами, созданными из сериализованного события, поскольку сериализованное имя класса не будет содержать номер версии, вы должны сохранить его в стороне.
Вместо того чтобы хранить каждую версию классов в вашем коде, преобразователь получит документ (дерево, например, документ Xml или объект JSon) и изменит его для предоставления информации, необходимой для построения последней версии. 1009 *
Все это зависит от вашего контроля над конвейером десериализации.