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; }