if (includeMetadata != null) return includeMetadata;
includeMetadata = new CodeAttributeDeclarationCollection ();
- if (exportedAnyType != null)
- {
- foreach (XmlTypeMapping map in exportedAnyType.DerivedTypes)
- {
- if (IsMapExported (map) || !map.IncludeInSchema) continue;
- ExportTypeMapping (map);
- GenerateClassInclude (includeMetadata, map);
- }
- }
- else {
- foreach (XmlTypeMapping map in includeMaps.Values)
- GenerateClassInclude (includeMetadata, map);
- }
+ foreach (XmlTypeMapping map in includeMaps.Values)
+ GenerateClassInclude (includeMetadata, map);
return includeMetadata;
}
{
exportedAnyType = map;
SetMapExported (map, null);
+ foreach (XmlTypeMapping dmap in exportedAnyType.DerivedTypes) {
+ if (IsMapExported (dmap) || !dmap.IncludeInSchema) continue;
+ ExportTypeMapping (dmap);
+ AddInclude (dmap);
+ }
return;
}
XmlReflectionImporter auxXmlRefImporter;\r
SoapReflectionImporter auxSoapRefImporter;\r
CodeGenerationOptions options;\r
+ bool anyTypeImported;\r
\r
static readonly XmlQualifiedName anyType = new XmlQualifiedName ("anyType",XmlSchema.Namespace);\r
static readonly XmlQualifiedName arrayType = new XmlQualifiedName ("Array",XmlSerializer.EncodingNamespace);\r
ImportAttributes (typeQName, cmap, stype.Attributes, stype.AnyAttribute, classIds);\r
ImportExtensionTypes (typeQName);\r
\r
- GetTypeMapping (TypeTranslator.GetTypeData (typeof(object))).DerivedTypes.Add (map);\r
+ AddObjectDerivedMap (map);\r
}\r
\r
void ImportAttributes (XmlQualifiedName typeQName, ClassMap cmap, XmlSchemaObjectCollection atts, XmlSchemaAnyAttribute anyat, CodeIdentifiers classIds)\r
\r
XmlTypeMapping GetTypeMapping (TypeData typeData)\r
{\r
+ if (typeData.Type == typeof(object) && !anyTypeImported)\r
+ ImportAllObjectTypes ();\r
+ \r
XmlTypeMapping map = (XmlTypeMapping) dataMappedTypes [typeData];\r
if (map != null) return map;\r
\r
- if (map == null && typeData.IsListType)\r
+ if (typeData.IsListType)\r
{\r
// Create an array map for the type\r
\r
}\r
else if (typeData.SchemaType == SchemaTypes.Primitive || typeData.Type == typeof(object) || typeof(XmlNode).IsAssignableFrom(typeData.Type))\r
{\r
- map = new XmlTypeMapping (typeData.XmlType, XmlSchema.Namespace, typeData, typeData.XmlType, XmlSchema.Namespace);\r
- map.IncludeInSchema = false;\r
- map.ObjectMap = new ClassMap ();\r
- dataMappedTypes [typeData] = map;\r
- \r
- if (typeData.Type == typeof(object))\r
- {\r
- // All complex types are subtypes of anyType, so all of them \r
- // must also be imported\r
- \r
- foreach (XmlSchema schema in schemas) {\r
- foreach (XmlSchemaObject sob in schema.Items) \r
- {\r
- XmlSchemaComplexType sct = sob as XmlSchemaComplexType;\r
- if (sct != null)\r
- ImportType (new XmlQualifiedName (sct.Name, schema.TargetNamespace), sct, null);\r
- }\r
- } \r
- }\r
- \r
- return map;\r
+ return CreateSystemMap (typeData);\r
}\r
\r
throw new InvalidOperationException ("Map for type " + typeData.TypeName + " not found");\r
}\r
+ \r
+ void AddObjectDerivedMap (XmlTypeMapping map)\r
+ {\r
+ TypeData typeData = TypeTranslator.GetTypeData (typeof(object));\r
+ XmlTypeMapping omap = (XmlTypeMapping) dataMappedTypes [typeData];\r
+ if (omap == null)\r
+ omap = CreateSystemMap (typeData);\r
+ omap.DerivedTypes.Add (map);\r
+ }\r
+ \r
+ XmlTypeMapping CreateSystemMap (TypeData typeData)\r
+ {\r
+ XmlTypeMapping map = new XmlTypeMapping (typeData.XmlType, XmlSchema.Namespace, typeData, typeData.XmlType, XmlSchema.Namespace);\r
+ map.IncludeInSchema = false;\r
+ map.ObjectMap = new ClassMap ();\r
+ dataMappedTypes [typeData] = map;\r
+ return map;\r
+ }\r
+ \r
+ void ImportAllObjectTypes ()\r
+ {\r
+ // All complex types are subtypes of anyType, so all of them \r
+ // must also be imported\r
+ \r
+ anyTypeImported = true;\r
+ foreach (XmlSchema schema in schemas) {\r
+ foreach (XmlSchemaObject sob in schema.Items) \r
+ {\r
+ XmlSchemaComplexType sct = sob as XmlSchemaComplexType;\r
+ if (sct != null)\r
+ ImportType (new XmlQualifiedName (sct.Name, schema.TargetNamespace), sct, null);\r
+ }\r
+ } \r
+ }\r
+ \r
\r
XmlTypeMapping GetRegisteredTypeMapping (XmlQualifiedName typeQName)\r
{\r