Converting Old Object Versions (Old UClass) with custom save system.

This is more of a theoretical question, but it may divulge into code examples.

I’m trying to make a custom save system so I can incorporate versioning a little easier and provide an interface for objects to save.

What I was thinking could be possible.

Have a struct with a UClass* UObject* and Version.

(Version is to convert the struct to a new struct so it’s an internal version for my eyes only).

Users are going to be changing class structure and variables all the time so I really don’t want users to have to specify that there is a change between classes, Id rather just copy over only the relevant data members that exist.

Here is my main question. Can you serialize this struct, then change the UClass in some way (Adding/Removing member varibles etc.). Now we have two different versions of the UClass that the UObject instance is built from. Could I simply deserialize the old UClass and create the old object from that class? Then I can TFieldIterate over the old class and just copy values from the old object instance to the new object instance?

Would this break anything in the engine? Ideally that process would only happen at engine startup and you would resave all your save files to immediately be the new UClass to have a clean slate before the levels have initialized.