private ICustomXmlSerializer TryGetCustomSerializer(object element)
        {
            if (this.Mode != WindowProfileSerializerMode.Custom)
            {
                return((ICustomXmlSerializer)null);
            }
            ICustomXmlSerializable customXmlSerializable = element as ICustomXmlSerializable;

            if (customXmlSerializable == null)
            {
                return((ICustomXmlSerializer)null);
            }
            return(customXmlSerializable.CreateSerializer());
        }
        private void SerializeInternal(object element, XmlWriter writer, bool isRootElement)
        {
            if (element == null)
            {
                return;
            }
            ICustomXmlSerializer customXmlSerializer = (ICustomXmlSerializer)null;

            if (this.Mode == WindowProfileSerializerMode.Custom)
            {
                ICustomXmlSerializable customXmlSerializable = element as ICustomXmlSerializable;
                if (customXmlSerializable != null)
                {
                    customXmlSerializer = customXmlSerializable.CreateSerializer();
                    if (customXmlSerializer == null)
                    {
                        return;
                    }
                }
            }
            Type type = element.GetType();

            if (this.Mode == WindowProfileSerializerMode.Reflection && WindowProfileSerializer.IsTypeNonSerializable(type))
            {
                return;
            }
            if (WindowProfileSerializer.IsSequenceType(type))
            {
                this.SerializeSequence(element as IEnumerable, writer);
            }
            else
            {
                if (this.GetPrefix(type) != null)
                {
                    writer.WriteStartElement(this.GetPrefix(type), type.Name, this.GetClrNamespace(type));
                }
                else
                {
                    writer.WriteStartElement(type.Name, this.GetClrNamespace(type));
                }
                if (isRootElement)
                {
                    this.WriteNamespaceDeclarations(writer);
                }
                object contentPropertyValue = (object)null;
                IEnumerable <KeyValuePair <string, object> > enumerable;
                if (customXmlSerializer != null)
                {
                    customXmlSerializer.WriteXmlAttributes(writer);
                    enumerable           = customXmlSerializer.GetNonContentPropertyValues();
                    contentPropertyValue = customXmlSerializer.Content;
                }
                else
                {
                    enumerable = (IEnumerable <KeyValuePair <string, object> >)WindowProfileSerializer.GetChildPropertiesAndContent(element, writer, type, ref contentPropertyValue);
                }
                foreach (KeyValuePair <string, object> keyValuePair in enumerable)
                {
                    string localName = type.Name + "." + keyValuePair.Key;
                    if (this.GetPrefix(type) != null)
                    {
                        writer.WriteStartElement(this.GetPrefix(type), localName, this.GetClrNamespace(type));
                    }
                    else
                    {
                        writer.WriteStartElement(localName, this.GetClrNamespace(type));
                    }
                    this.SerializeInternal(keyValuePair.Value, writer, false);
                    writer.WriteEndElement();
                }
                if (contentPropertyValue != null)
                {
                    this.SerializeInternal(contentPropertyValue, writer, false);
                }
                writer.WriteEndElement();
            }
        }