int GetPropertyOrder(CodeTypeDeclaration ctd, CodeTypeMemberExtension memberExt)
        {
            int order = -1;
            int propOrder = -1;

            foreach (CodeTypeMember member in ctd.Members)
            {
                CodeTypeMemberExtension currMemberExt = member as CodeTypeMemberExtension;

                if (memberExt != null && memberExt.Kind == CodeTypeMemberKind.Property)
                {
                    foreach (CodeAttributeDeclaration cad in memberExt.ExtendedObject.CustomAttributes)
                    {
                        foreach (CodeAttributeArgument caa in cad.Arguments)
                        {
                            if (caa.Name == "Order")
                            {
                                CodePrimitiveExpression cpe = caa.Value as CodePrimitiveExpression;

                                if (cpe != null)
                                {
                                    order = (int)cpe.Value;
                                }

                            }
                        }
                    }

                    propOrder++;
                }
            }

            if (order != -1)
            {
                propOrder = order;
            }

            return propOrder;                
        }
        List<XmlQualifiedName> GetXmlAttributes(string codeTypeNamespace, CodeTypeMemberExtension memberExt)
        {
            List<XmlQualifiedName> res = new List<XmlQualifiedName>();

            foreach (CodeAttributeDeclaration cad in memberExt.ExtendedObject.CustomAttributes)
            {
                if (cad.Name == "System.Xml.Serialization.XmlElementAttribute")
                {
                    string typeName = string.Empty;
                    string typeNamespace = codeTypeNamespace;
                    string elementName = string.Empty;

                    // initialize to the type namespace for the case where the element has no namespace
                    string elementNamespace = typeNamespace;

                    foreach (CodeAttributeArgument caa in cad.Arguments)
                    {
                        if (caa.Name == "Namespace")
                        {
                            CodePrimitiveExpression cpe = caa.Value as CodePrimitiveExpression;

                            if (cpe != null)
                            {
                                elementNamespace = cpe.Value.ToString();
                            }

                            continue;
                        }

                        CodePrimitiveExpression cpe2 = caa.Value as CodePrimitiveExpression;

                        if (cpe2 != null)
                        {
                            if (elementName == string.Empty)
                            {
                                // need to get the namespace
                                elementName = (cpe2.Value.ToString());
                            }
                        }
                    }

                    XmlQualifiedName qn = new XmlQualifiedName(elementName, typeNamespace);

                    res.Add(qn);
                }
            }
            return res;
        }