Browse Source

* SerializationCodeGenerator.cs, XmlSerializationReaderInterpreter.cs:
Fixed handling of members with XmlTextAttribute that are arrays.
* TypeData.cs: IsComplexType now returns true for XmlNode.
* XmlSerializer.cs: Added check for null mapping in FromMappings.
* XmlTypeMapping.cs: Added helper method FindTextElement.

svn path=/trunk/mcs/; revision=18471

Lluis Sanchez 22 years ago
parent
commit
0069f9df0d

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

@@ -1,3 +1,11 @@
+2003-10-01  Lluis Sanchez Gual <[email protected]>
+
+	* SerializationCodeGenerator.cs, XmlSerializationReaderInterpreter.cs: 
+	  Fixed handling of members with XmlTextAttribute that are arrays.
+	* TypeData.cs: IsComplexType now returns true for XmlNode.
+	* XmlSerializer.cs: Added check for null mapping in FromMappings.
+	* XmlTypeMapping.cs: Added helper method FindTextElement.
+
 2003-09-28  Lluis Sanchez Gual <[email protected]>
 	
 	* SoapReflectionImporter.cs, XmlReflectionImporter.cs, XmlSchemaExporter.cs:

+ 4 - 1
mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs

@@ -1346,8 +1346,11 @@ namespace System.Xml.Serialization
 					if (map.XmlTextCollector is XmlTypeMapMemberExpandable)
 					{
 						XmlTypeMapMemberExpandable mem = (XmlTypeMapMemberExpandable)map.XmlTextCollector;
+						XmlTypeMapMemberFlatList flatl = mem as XmlTypeMapMemberFlatList;
+						Type itype = (flatl == null) ? mem.TypeData.ListItemType : flatl.ListMap.FindTextElement().TypeData.Type;
+						
 						if (!GenerateReadArrayMemberHook (typeMap.TypeData.Type, map.XmlTextCollector, indexes[mem.FlatArrayIndex])) {
-							string val = (mem.TypeData.ListItemType == typeof (string)) ? "Reader.ReadString()" : "ReadXmlNode (false)";
+							string val = (itype == typeof (string)) ? "Reader.ReadString()" : "ReadXmlNode (false)";
 							GenerateAddListValue (mem.TypeData, flatLists[mem.FlatArrayIndex], indexes[mem.FlatArrayIndex], val, true);
 							GenerateEndHook ();
 						}

+ 1 - 1
mcs/class/System.XML/System.Xml.Serialization/TypeData.cs

@@ -106,6 +106,7 @@ namespace System.Xml.Serialization
 				return (SchemaType == SchemaTypes.Class || 
 					      SchemaType == SchemaTypes.Array ||
 					      SchemaType == SchemaTypes.Enum ||
+					      SchemaType == SchemaTypes.XmlNode ||
 						  SchemaType == SchemaTypes.XmlSerializable ); 
 			}
 		}
@@ -175,4 +176,3 @@ namespace System.Xml.Serialization
 		}
 	}
 }
-

+ 4 - 1
mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs

@@ -332,7 +332,10 @@ namespace System.Xml.Serialization
 					if (map.XmlTextCollector is XmlTypeMapMemberExpandable)
 					{
 						XmlTypeMapMemberExpandable mem = (XmlTypeMapMemberExpandable)map.XmlTextCollector;
-						object val = (mem.TypeData.ListItemType == typeof (string)) ? (object) Reader.ReadString() : (object) ReadXmlNode (false);
+						XmlTypeMapMemberFlatList flatl = mem as XmlTypeMapMemberFlatList;
+						Type itype = (flatl == null) ? mem.TypeData.ListItemType : flatl.ListMap.FindTextElement().TypeData.Type;
+
+						object val = (itype == typeof (string)) ? (object) Reader.ReadString() : (object) ReadXmlNode (false);
 						AddListValue (mem.TypeData, ref flatLists[mem.FlatArrayIndex], indexes[mem.FlatArrayIndex]++, val, true);
 					}
 					else

+ 3 - 1
mcs/class/System.XML/System.Xml.Serialization/XmlSerializer.cs

@@ -209,7 +209,9 @@ namespace System.Xml.Serialization
 		{
 			XmlSerializer [] sers = new XmlSerializer [mappings.Length];
 			for (int n=0; n<mappings.Length; n++)
-				sers[n] = new XmlSerializer (mappings[n]);
+				if (mappings[n] != null)
+					sers[n] = new XmlSerializer (mappings[n]);
+					
 			return sers;
 		}
 

+ 7 - 0
mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs

@@ -367,6 +367,13 @@ namespace System.Xml.Serialization
 			return null;
 		}
 		
+		public XmlTypeMapElementInfo FindTextElement ()
+		{
+			foreach (XmlTypeMapElementInfo elem in _itemInfo)
+				if (elem.IsTextElement) return elem;
+			return null;
+		}
+		
 		public string GetSchemaArrayName ()
 		{
 			XmlTypeMapElementInfo einfo = (XmlTypeMapElementInfo) _itemInfo[0];