I would advise against trying to serialize whole gameobjects. It's not supported by most serialization packages for good reason - you will be serializing a hell of a lot of information that you don't need for each object.
For each gameobject there will only be a limited number of things you actually need. Say for an enemy unit, you might want to serialize position, rotation, turret rotation, health and ammo. You can serialize these in a separate serializable non-monobehaviour class. When you rebuild your scene, you spawn your enemies from their prefab like usual, deserialize their data and pass through their parameters to restore their state.
It's more work (as far as programming is concerned), but it will be faster and result in less storage space being used.