Browse Source

2006-02-16 Lluis Sanchez Gual <[email protected]>

	* XmlSchemaImporter.cs: Support importing complex types with
	  simple content based on enums. Fixes bug #76848.


svn path=/trunk/mcs/; revision=56948
Lluis Sanchez 20 years ago
parent
commit
2bf5233dd8

+ 5 - 0
mcs/class/System.XML/System.Xml.Serialization/ChangeLog

@@ -1,3 +1,8 @@
+2006-02-16  Lluis Sanchez Gual  <[email protected]>
+
+	* XmlSchemaImporter.cs: Support importing complex types with
+	  simple content based on enums. Fixes bug #76848.
+
 2006-02-11  Gert Driesen  <[email protected]>
 
 	* SoapAttributeAttribute.cs: Set eol-style to CRLF.

+ 17 - 9
mcs/class/System.XML/System.Xml.Serialization/XmlSchemaImporter.cs

@@ -1086,6 +1086,7 @@ namespace System.Xml.Serialization
 			XmlSchemaSimpleContentExtension ext = content.Content as XmlSchemaSimpleContentExtension;
 			ClassMap cmap = (ClassMap)map.ObjectMap;
 			XmlQualifiedName qname = GetContentBaseType (content.Content);
+			TypeData simpleType = null;
 			
 			if (!IsPrimitiveTypeNamespace (qname.Namespace))
 			{
@@ -1093,19 +1094,26 @@ namespace System.Xml.Serialization
 	
 				XmlTypeMapping baseMap = ImportType (qname, null, true);
 				BuildPendingMap (baseMap);
-				ClassMap baseClassMap = (ClassMap)baseMap.ObjectMap;
-	
-				foreach (XmlTypeMapMember member in baseClassMap.AllMembers)
-					cmap.AddMember (member);
-	
-				map.BaseMap = baseMap;
-				baseMap.DerivedTypes.Add (map);
+				
+				if (baseMap.IsSimpleType) {
+					simpleType = baseMap.TypeData;
+				} else {
+					ClassMap baseClassMap = (ClassMap)baseMap.ObjectMap;
+		
+					foreach (XmlTypeMapMember member in baseClassMap.AllMembers)
+						cmap.AddMember (member);
+		
+					map.BaseMap = baseMap;
+					baseMap.DerivedTypes.Add (map);
+				}
 			}
 			else
-			{
+				simpleType = FindBuiltInType (qname);
+				
+			if (simpleType != null) {
 				XmlTypeMapMemberElement member = new XmlTypeMapMemberElement ();
 				member.Name = classIds.AddUnique("Value", member);
-				member.TypeData = FindBuiltInType (qname);
+				member.TypeData = simpleType;
 				member.ElementInfo.Add (CreateTextElementInfo (typeQName.Namespace, member, member.TypeData));
 				member.IsXmlTextCollector = true;
 				cmap.AddMember (member);