private object Deserializer(Type type, string value)
        {
            object retVal = null;

            // First try to deserialize using simple types first, then use xml serializer
            if (value == null)
            {
                return(null);
            }
            else if (typeof(string) == type)
            {
                retVal = value;
            }
            else if (typeof(Type) == type)
            {
                retVal = Type.GetType(value);
            }
            else if (type.IsEnum)
            {
                retVal = Enum.Parse(type, value);
            }

            if (retVal == null)
            {
                retVal = TryParsePrimitive(type, value);
            }

            if (retVal == null)
            {
                using (var reader = new StringReader(value))
                {
                    try
                    {
                        XmlSerializer xmlserializer = XmlSerializerCache.GetSerializer(type);
                        retVal = xmlserializer.Deserialize(reader);
                    }
                    catch (Exception ex)
                    {
                        var configEx = new ConfigurationException("Error on deserializing configuration data", ex);
                        throw configEx;
                    }
                }
            }

            return(retVal);
        }
        private string Serializer(Type type, object value)
        {
            if (value == null)
            {
                return(null);
            }

            string retVal = null;

            //Try to simplify serialization for simple types first without using xmlserializer.
            if (typeof(string) == type)
            {
                retVal = value as string;
            }
            else if (typeof(Type) == type)
            {
                retVal = ((Type)value).AssemblyQualifiedName;
            }
            else if (type.IsEnum)
            {
                retVal = value.ToString();
            }
            else
            {
                retVal = TrySerializePrimitive(type, value);
            }

            if (retVal == null)
            {
                using (var writer = new StringWriter(CultureInfo.InvariantCulture))
                {
                    try
                    {
                        XmlSerializer xmlserializer = XmlSerializerCache.GetSerializer(type);
                        xmlserializer.Serialize(writer, value);
                        retVal = writer.ToString();
                    }
                    catch (Exception ex)
                    {
                        var configEx = new ConfigurationException("Error on serializing configuration data", ex);
                        throw configEx;
                    }
                }
            }
            return(retVal);
        }