I'm seeing that you're using ".GetType" to resolve the specific type when you Serialize, but you force the parent type, Arrangement, to DeSerialize. (as someone else also just posted :) )
That is causing the error. Just like Serializing, you have to have the explicit type available; it isn't going to try every child automatically for Deserialize.
An easy answer is to query the xml string for the name.
Before loading the XmlSerializer, load an XmlDocument.
Grab that root name from XmlDocument.DocumentElement.Name.
Use the static Type.GetType method on the string name for the XmlSerializer type.
http://msdn.microsoft.com/en-us/library/system.xml.xmldocument.documentelement(v=vs.110).aspx