/// <summary>
        /// Create or reuse a XmlSerializer with a specific override!
        /// The .NET Factory method "CreateSerializer" do not support caching with a custom override!
        /// This method is optimized for speed and is threadsafe.
        /// </summary>
        /// <param name="factory"></param>
        /// <param name="type"></param>
        /// <param name="overrides"></param>
        /// <returns></returns>
        public static XmlSerializer GetSerializer(this XmlSerializerFactory factory, Type type, XmlAttributeOverrides overrides)
        {
            XmlSerializer result = null;

            string key = type.AssemblyQualifiedName;
            if (overrides != null)
            {
                key += overrides.GetHashCode();

                if (!serializerTable.TryGetValue(key, out result))
                {
                    result = factory.CreateSerializer(type, overrides);
                    serializerTable.MergeSafe(key, result);
                }
            }
            else
            {
                result = factory.CreateSerializer(type);
            }

            return result;
        }