+2004-07-02 Lluis Sanchez Gual <lluis@ximian.com>
+
+ * SerializationCodeGenerator.cs: Generate check that the object being
+ serialized has a known type. Little cast fix.
+ * XmlCustomFormatter.cs: Little fix in Single conversion.
+
2004-07-01 Lluis Sanchez Gual <lluis@ximian.com>
* TypeData.cs: In the constructor, set the correct xml type name if the
}
ArrayList types = typeMap.DerivedTypes;
- bool first = true;
+
+ WriteLine ("System.Type type = ob.GetType ();");
+ WriteLine ("if (type == typeof(" + typeMap.TypeFullName + "))");
+ WriteLine ("\t;");
+
for (int n=0; n<types.Count; n++)
{
XmlTypeMapping map = (XmlTypeMapping)types[n];
- WriteLineInd ((first?"else ":"") + "if (ob is " + map.TypeFullName + ") { ");
+ WriteLineInd ("else if (type == typeof(" + map.TypeFullName + ")) { ");
WriteLine (GetWriteObjectName (map) + "((" + map.TypeFullName + ")ob, element, namesp, isNullable, true, writeWrappingElem);");
WriteLine ("return;");
WriteLineUni ("}");
- first = false;
}
if (typeMap.TypeData.Type == typeof (object)) {
}
else
{
- if (types.Count > 0)
- WriteLine ("");
+ WriteLineInd ("else {");
+ WriteLine ("throw CreateUnknownTypeException (ob);");
+ WriteLineUni ("}");
+ WriteLine ("");
WriteLineInd ("if (writeWrappingElem) {");
if (_format == SerializationFormat.Encoded) WriteLine ("needType = true;");
WriteLine (td.FullTypeName + " dest = (" + td.FullTypeName + ") list;");
WriteLine ("foreach (object ob in (IEnumerable)source)");
- WriteLine ("\t dest.Add (ob);");
+ WriteLine ("\tdest.Add (" + GetCast (td.ListItemTypeData, "ob") + ");");
WriteLineUni ("}");
WriteLine ("");
}
case "int": return "Int32.Parse (" + value + ", CultureInfo.InvariantCulture)";
case "long": return "Int64.Parse (" + value + ", CultureInfo.InvariantCulture)";
case "byte": return "SByte.Parse (" + value + ", CultureInfo.InvariantCulture)";
- case "float": return "XmlConvert.ToSingle (" + value + ", CultureInfo.InvariantCulture)";
+ case "float": return "XmlConvert.ToSingle (" + value + ")";
case "unsignedShort": return "UInt16.Parse (" + value + ", CultureInfo.InvariantCulture)";
case "unsignedInt": return "UInt32.Parse (" + value + ", CultureInfo.InvariantCulture)";
case "unsignedLong": return "UInt64.Parse (" + value + ", CultureInfo.InvariantCulture)";