System.Xml.Serialization.XmlSchemaImporter.ImportElementType C# (CSharp) Method

ImportElementType() private method

private ImportElementType ( XmlSchemaElement element, string identifier, Type desiredMappingType, Type baseType, string ns ) : TypeMapping
element System.Xml.Schema.XmlSchemaElement
identifier string
desiredMappingType Type
baseType Type
ns string
return TypeMapping
        private TypeMapping ImportElementType(XmlSchemaElement element, string identifier, Type desiredMappingType, Type baseType, string ns)
        {
            TypeMapping mapping;
            if (!element.SchemaTypeName.IsEmpty)
            {
                mapping = ImportType(element.SchemaTypeName, desiredMappingType, baseType, TypeFlags.CanBeElementValue, false);
                if (!mapping.ReferencedByElement)
                {
                    object type = FindType(element.SchemaTypeName, TypeFlags.CanBeElementValue);
                    XmlSchemaObject parent = element;
                    while (parent.Parent != null && type != parent)
                    {
                        parent = parent.Parent;
                    }
                    mapping.ReferencedByElement = (type != parent);
                }
            }
            else if (element.SchemaType != null)
            {
                if (element.SchemaType is XmlSchemaComplexType)
                    mapping = ImportType((XmlSchemaComplexType)element.SchemaType, ns, identifier, desiredMappingType, baseType, TypeFlags.CanBeElementValue);
                else
                    mapping = ImportDataType((XmlSchemaSimpleType)element.SchemaType, ns, identifier, baseType, TypeFlags.CanBeElementValue | TypeFlags.CanBeAttributeValue | TypeFlags.CanBeTextValue, false);
                mapping.ReferencedByElement = true;
            }
            else if (!element.SubstitutionGroup.IsEmpty)
                mapping = ImportElementType(FindElement(element.SubstitutionGroup), identifier, desiredMappingType, baseType, ns);
            else
            {
                if (desiredMappingType == typeof(MembersMapping))
                {
                    mapping = ImportMembersType(new XmlSchemaType(), ns, identifier);
                }
                else
                {
                    mapping = ImportRootMapping();
                }
            }
            if (!(desiredMappingType.IsAssignableFrom(mapping.GetType())))
                throw new InvalidOperationException(SR.Format(SR.XmlElementImportedTwice, element.Name, ns, mapping.GetType().Name, desiredMappingType.Name));

            // let the extensions to run
            if (!mapping.TypeDesc.IsMappedType)
            {
                RunSchemaExtensions(mapping, element.SchemaTypeName, element.SchemaType, element, TypeFlags.CanBeElementValue);
            }
            return mapping;
        }