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
+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:
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 ();
}
return (SchemaType == SchemaTypes.Class ||
SchemaType == SchemaTypes.Array ||
SchemaType == SchemaTypes.Enum ||
+ SchemaType == SchemaTypes.XmlNode ||
SchemaType == SchemaTypes.XmlSerializable );
}
}
}
}
}
-
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
{
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;
}
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