In my game I used the attribute `[Serializable]` on relevant classes to serialise my campaign (a collection of maps and levels) into a single file but now the campaign is nearing 20MB in size and it's becoming too slow for serialising/deserialising.

It currently takes about 11 seconds to deserialise the campaign into memory from disk.

I know about [protobuf-net](https://github.com/mgravell/protobuf-net) but I want to try the `ISerializable` approach for now. Would implementing the `ISerializable` interface on a class interfere with the deserialisation of a previous version of that class which only used `[Serializable]` and `[NonSerialized]` attributes to serialise?

I imagine I could create an `ISerializable` copy of each relevant class and copy data from one to another but that sounds like a recipe for disaster.

Is it possible to tell the `BinaryFormatter` to ignore any `ISerializable` attributes and only deserialise using the `[Serializable]` and `[NonSerialized]` attributes?

Update 1: I use a custom binder to fix up type and assembly name differences but this made no noticable difference when not in use.

Update 2: 
SSD embedded content deserialisation takes ~12.2s, 
SSD disk file deserialisation takes ~11.4s, 
`MemoryStream` serialisation takes ~3.4s and 
`MemoryStream` deserialisation takes ~11.2s.
I feel silly but I forgot to mention this is all done on a seperate thread. I'll increase it's priority and see if that changes anything.

Update 3: loading thread priority set to `Highest` trimmed off less than a second.

Thank you for your time.