* SerializationCodeGenerator.cs, XmlSerializationReaderInterpreter.cs:
authorLluis Sanchez <lluis@novell.com>
Wed, 1 Oct 2003 15:11:03 +0000 (15:11 -0000)
committerLluis Sanchez <lluis@novell.com>
Wed, 1 Oct 2003 15:11:03 +0000 (15:11 -0000)
  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

mcs/class/System.XML/System.Xml.Serialization/ChangeLog
mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs
mcs/class/System.XML/System.Xml.Serialization/TypeData.cs
mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs
mcs/class/System.XML/System.Xml.Serialization/XmlSerializer.cs
mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs

index ad8c45fd4cc57be0876eeb3aa0d533e295781197..10d7a3205d34efe6ab884a1f9c1f6085a7ea1785 100755 (executable)
@@ -1,3 +1,11 @@
+2003-10-01  Lluis Sanchez Gual <lluis@ximian.com>
+
+       * 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 <lluis@ximian.com>
        
        * SoapReflectionImporter.cs, XmlReflectionImporter.cs, XmlSchemaExporter.cs:
index db0ddc15b36af5b2b0f20060d617dfc8b5b3c82d..829df04f00277248d14677008af53287bdb25818 100644 (file)
@@ -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 ();
                                                }
index 389657a9c0d6ded6575afa13b6eaa0dd91aa340b..84481140a0355a7ada4bc60cd25cba8a85e2e0a6 100644 (file)
@@ -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
                }
        }
 }
-
index f432e460eaf17f383e5bd8b46a8ce0bb0bba3b8d..d0274d186477768015814bd52b77102b176861c5 100644 (file)
@@ -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
index 2f16f9a1e222ee7064f011326fa30b27e6d7be51..ee8ddd13b7fb342e7753ac62e87d3c607f0a8bb8 100644 (file)
@@ -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;
                }
 
index e58aca2c263bf6a7857a8712e0348ee6f630726b..db1178f665aa4607268cee82bcd990672086a060 100644 (file)
@@ -367,6 +367,13 @@ namespace System.Xml.Serialization
                        return null;\r
                }\r
                \r
+               public XmlTypeMapElementInfo FindTextElement ()\r
+               {\r
+                       foreach (XmlTypeMapElementInfo elem in _itemInfo)\r
+                               if (elem.IsTextElement) return elem;\r
+                       return null;\r
+               }\r
+               \r
                public string GetSchemaArrayName ()\r
                {\r
                        XmlTypeMapElementInfo einfo = (XmlTypeMapElementInfo) _itemInfo[0];\r