private void FillConfigWithAttribValue(Object config, XmlAttribute xmlAttrib)
        {
            Type type = config.GetType();

            PropertyInfo[] objProps = type.GetProperties();

            if (objProps != null)
            {
                for (int i = 0; i < objProps.Length; i++)
                {
                    PropertyInfo propInfo      = objProps[i];
                    Object[]     customAttribs = propInfo.GetCustomAttributes(typeof(ConfigurationAttributeAttribute), false);
                    if (customAttribs != null && customAttribs.Length > 0)
                    {
                        ConfigurationAttributeAttribute configAttrib = customAttribs[0] as ConfigurationAttributeAttribute;
                        try
                        {
                            if (configAttrib != null && String.Compare(configAttrib.AttributeName, xmlAttrib.Name, true) == 0)
                            {
                                propInfo.SetValue(config, ConvertToPrimitive(propInfo.PropertyType, xmlAttrib.Value, configAttrib.AppendedText), null);
                            }
                        }
                        catch (Exception e)
                        {
                            throw new Exception("Can not set the value for attribute " + configAttrib.AttributeName + " Errror :" + e.ToString());
                        }
                    }
                }
            }
        }
        private string GetSectionXml(Object configSection, string sectionName, int indent)
        {
            string endStr = "\r\n";
            string preStr = "".PadRight(indent * 2);

            StringBuilder sb   = new StringBuilder(preStr + "<" + sectionName);
            Type          type = configSection.GetType();

            PropertyInfo[] propertiesInfo = type.GetProperties();

            if (propertiesInfo != null && propertiesInfo.Length > 0)
            {
                for (int i = 0; i < propertiesInfo.Length; i++)
                {
                    PropertyInfo property      = propertiesInfo[i];
                    object[]     customAttribs = property.GetCustomAttributes(true);

                    if (customAttribs != null && customAttribs.Length > 0)
                    {
                        for (int j = 0; j < customAttribs.Length; j++)
                        {
                            ConfigurationAttributeAttribute attrib = customAttribs[j] as ConfigurationAttributeAttribute;
                            if (attrib != null)
                            {
                                Object propertyValue = property.GetValue(configSection, null);
                                string appendedText  = attrib.AppendedText != null ? attrib.AppendedText : "";
                                if (propertyValue != null)
                                {
                                    sb.Append(" " + attrib.AttributeName + "=\"" + propertyValue.ToString() + appendedText + "\"");
                                }
                                else
                                {
                                    sb.Append(" " + attrib.AttributeName + "=\"\"");
                                }
                            }
                        }
                    }
                }
            }
            bool          subsectionsFound = false;
            bool          firstSubSection  = true;
            StringBuilder comments         = null;

            //get xml string for sub-sections if exists
            if (propertiesInfo != null && propertiesInfo.Length > 0)
            {
                for (int i = 0; i < propertiesInfo.Length; i++)
                {
                    PropertyInfo property      = propertiesInfo[i];
                    object[]     customAttribs = property.GetCustomAttributes(true);

                    if (customAttribs != null && customAttribs.Length > 0)
                    {
                        for (int j = 0; j < customAttribs.Length; j++)
                        {
                            ConfigurationCommentAttribute commentAttrib = customAttribs[j] as ConfigurationCommentAttribute;
                            if (commentAttrib != null)
                            {
                                Object propertyValue = property.GetValue(configSection, null);
                                if (propertyValue != null)
                                {
                                    string propStr = propertyValue as string;
                                    if (!string.IsNullOrEmpty(propStr))
                                    {
                                        if (comments == null)
                                        {
                                            comments = new StringBuilder();
                                        }
                                        comments.AppendFormat("{0}<!--{1}-->{2}", preStr, propStr, endStr);
                                    }
                                }
                            }

                            ConfigurationSectionAttribute attrib = customAttribs[j] as ConfigurationSectionAttribute;
                            if (attrib != null)
                            {
                                Object propertyValue = property.GetValue(configSection, null);
                                if (propertyValue != null)
                                {
                                    subsectionsFound = true;
                                    if (firstSubSection)
                                    {
                                        sb.Append(">" + endStr);
                                        firstSubSection = false;
                                    }
                                    if (propertyValue.GetType().IsArray)
                                    {
                                        Array  array = propertyValue as Array;
                                        Object actualSectionObj;
                                        for (int k = 0; k < array.Length; k++)
                                        {
                                            actualSectionObj = array.GetValue(k);
                                            if (actualSectionObj != null)
                                            {
                                                sb.Append(GetSectionXml(actualSectionObj, attrib.SectionName, indent + 1));
                                            }
                                        }
                                    }
                                    else
                                    {
                                        sb.Append(GetSectionXml(propertyValue, attrib.SectionName, indent + 1));
                                    }
                                }
                            }
                        }
                    }
                }
            }

            if (subsectionsFound)
            {
                sb.Append(preStr + "</" + sectionName + ">" + endStr);
            }
            else
            {
                sb.Append("/>" + endStr);
            }

            string xml = string.Empty;

            if (comments != null)
            {
                xml = comments.ToString() + sb.ToString();
            }
            else
            {
                xml = sb.ToString();
            }

            return(xml);
        }