public XmlSerializer GetXmlSerializer(Type type) { XmlSerializer serializer; lock (SerializerCache) { if (SerializerCache.ContainsKey(type)) { serializer = SerializerCache[type]; } else { // Next line of code is VERY slow comparitavily and it isn't the ToArray() call. serializer = new XmlSerializer(type, SerializationTypesList.ToArray()); serializer.UnknownNode += this.XmlSerializer_UnknownNode; serializer.UnreferencedObject += this.XMLSerializer_UnreferencedObject; serializer.UnknownElement += this.XMLSerializer_UnknownElement; serializer.UnknownAttribute += this.XMLSerializer_UnknownAttribute; SerializerCache.Add(type, serializer); } } return serializer; }