2
0
Эх сурвалжийг харах

* SerializationCodeGenerator.cs, XmlSerializationReaderInterpreter.cs:
when reading a primitive value in encoded format using
ReadReferencingElement, provide the type name and namespace
since the xsi type may not be present in the xml element. This
fixes bug #65929.

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

Lluis Sanchez 21 жил өмнө
parent
commit
652840c106

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

@@ -1,3 +1,11 @@
+2004-09-21  Lluis Sanchez Gual  <[email protected]>
+
+	* SerializationCodeGenerator.cs, XmlSerializationReaderInterpreter.cs:
+	  when reading a primitive value in encoded format using
+	  ReadReferencingElement, provide the type name and namespace
+	  since the xsi type may not be present in the xml element. This
+	  fixes bug #65929.
+
 2004-09-15  Lluis Sanchez Gual  <[email protected]>
 
 	* MapCodeGenerator.cs: Moved generation of XmlInclude attributes from

+ 6 - 2
mcs/class/System.XML/System.Xml.Serialization/SerializationCodeGenerator.cs

@@ -1746,11 +1746,15 @@ namespace System.Xml.Serialization
 					{
 						if (!readByOrder)
 							WriteLine (readFlag[info.Member.Index] + " = true;");
-						if (_format == SerializationFormat.Encoded) 
+						if (_format == SerializationFormat.Encoded)
 						{
 							string val = GetObTempVar ();
 							RegisterReferencingMap (info.MappedType);
-							WriteLine ("object " + val + " = ReadReferencingElement (out fixup.Ids[" + info.Member.Index + "]);");
+							
+							if (info.Member.TypeData.SchemaType != SchemaTypes.Primitive)
+								WriteLine ("object " + val + " = ReadReferencingElement (out fixup.Ids[" + info.Member.Index + "]);");
+							else
+								WriteLine ("object " + val + " = ReadReferencingElement (" + GetLiteral(info.Member.TypeData.XmlType) + ", " + GetLiteral(System.Xml.Schema.XmlSchema.Namespace) + ", out fixup.Ids[" + info.Member.Index + "]);");
 							
 							if (info.MultiReferenceType)
 								WriteLineInd ("if (fixup.Ids[" + info.Member.Index + "] == null) {");	// already read

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

@@ -390,7 +390,11 @@ namespace System.Xml.Serialization
 							readFlag[info.Member.Index] = true;
 							if (_format == SerializationFormat.Encoded)
 							{
-								val = ReadReferencingElement (out fixup.Ids[info.Member.Index]);
+								if (info.Member.TypeData.SchemaType != SchemaTypes.Primitive)
+									val = ReadReferencingElement (out fixup.Ids[info.Member.Index]);
+								else
+									val = ReadReferencingElement (info.Member.TypeData.XmlType, System.Xml.Schema.XmlSchema.Namespace, out fixup.Ids[info.Member.Index]);
+									
 								if (info.MultiReferenceType) {
 									if (fixup.Ids[info.Member.Index] == null)	// already read
 										SetMemberValue (info.Member, ob, val, isValueList);