Procházet zdrojové kódy

* SoapReflectionImporter.cs: Fixed construcion of XmlMemberMapping.
* XmlMemberMapping.cs: Changed constructor.
* XmlReflectionImporter.cs: Fixed construcion of XmlMemberMapping.
* XmlSchemaImporter.cs: Implemented ImportMembersMapping().
* XmlSerializationReaderInterpreter.cs: Added some helper methods. Changed visibility.
* XmlSerializationWriterInterpreter.cs: Changed visibility.

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

Lluis Sanchez před 22 roky
rodič
revize
fb0fca96f3

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

@@ -1,3 +1,12 @@
+2003-08-29  Lluis Sanchez Gual <[email protected]>
+
+	* SoapReflectionImporter.cs: Fixed construcion of XmlMemberMapping.
+	* XmlMemberMapping.cs: Changed constructor.
+	* XmlReflectionImporter.cs: Fixed construcion of XmlMemberMapping.
+	* XmlSchemaImporter.cs: Implemented ImportMembersMapping().
+	* XmlSerializationReaderInterpreter.cs: Added some helper methods. Changed visibility.
+	* XmlSerializationWriterInterpreter.cs: Changed visibility.
+
 2003-08-28  Lluis Sanchez Gual <[email protected]>
 
 	* XmlSerializer.cs: Fix in Deserialize() method.

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

@@ -65,7 +65,7 @@ namespace System.Xml.Serialization {
 			for (int n=0; n<members.Length; n++)
 			{
 				XmlTypeMapMember mapMem = CreateMapMember (members[n], ns);
-				mapping[n] = new XmlMemberMapping (members[n], mapMem);
+				mapping[n] = new XmlMemberMapping (members[n].MemberName, mapMem);
 			}
 			XmlMembersMapping mps = new XmlMembersMapping (elementName, ns, hasWrapperElement, mapping);
 			mps.RelatedMaps = relatedMaps;

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

@@ -18,10 +18,10 @@ namespace System.Xml.Serialization
 		string _namespace;
 		string _typeNamespace;
 
-		internal XmlMemberMapping (XmlReflectionMember rmember, XmlTypeMapMember mapMem)
+		internal XmlMemberMapping (string memberName, XmlTypeMapMember mapMem)
 		{
 			_mapMember = mapMem;
-			_memberName = rmember.MemberName;
+			_memberName = memberName;
 
 			if (mapMem is XmlTypeMapMemberElement)
 			{

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

@@ -77,7 +77,7 @@ namespace System.Xml.Serialization {
 			for (int n=0; n<members.Length; n++)
 			{
 				XmlTypeMapMember mapMem = CreateMapMember (members[n], ns);
-				mapping[n] = new XmlMemberMapping (members[n], mapMem);
+				mapping[n] = new XmlMemberMapping (members[n].MemberName, mapMem);
 			}
 			XmlMembersMapping mps = new XmlMembersMapping (elementName, ns, hasWrapperElement, mapping);
 			mps.RelatedMaps = relatedMaps;

+ 33 - 7
mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs

@@ -13,7 +13,7 @@ using System.Collections;
 
 namespace System.Xml.Serialization
 {
-	public class XmlSerializationReaderInterpreter: XmlSerializationReader
+	internal class XmlSerializationReaderInterpreter: XmlSerializationReader
 	{
 		XmlMapping _typeMap;
 		SerializationFormat _format;
@@ -44,6 +44,17 @@ namespace System.Xml.Serialization
 		{
 		}
 
+		protected XmlTypeMapping GetTypeMap (Type type)
+		{
+			ArrayList maps = _typeMap.RelatedMaps;
+			if (maps != null)
+			{
+				foreach (XmlTypeMapping map in maps)
+					if (map.TypeData.Type == type) return map;
+			}
+			throw new InvalidOperationException ("Type " + type + " not mapped");
+		}
+
 		public object ReadObject ()
 		{
 			Reader.MoveToContent();
@@ -76,7 +87,7 @@ namespace System.Xml.Serialization
 			return ob;
 		}
 
-		object ReadMessage (XmlMembersMapping typeMap)
+		protected virtual object ReadMessage (XmlMembersMapping typeMap)
 		{
 			object[] parameters = new object[typeMap.Count];
 
@@ -107,7 +118,7 @@ namespace System.Xml.Serialization
 			return parameters;
 		}
 
-		object ReadObject (XmlTypeMapping typeMap, bool isNullable, bool checkType)
+		protected virtual object ReadObject (XmlTypeMapping typeMap, bool isNullable, bool checkType)
 		{
 			switch (typeMap.TypeData.SchemaType)
 			{
@@ -121,7 +132,7 @@ namespace System.Xml.Serialization
 			}
 		}
 
-		object ReadClassInstance (XmlTypeMapping typeMap, bool isNullable, bool checkType)
+		protected virtual object ReadClassInstance (XmlTypeMapping typeMap, bool isNullable, bool checkType)
 		{
 			if (isNullable && ReadNull()) return null;
 
@@ -146,7 +157,7 @@ namespace System.Xml.Serialization
 
 			Reader.MoveToElement();
 			bool isEmpty = Reader.IsEmptyElement;
-			ReadMembers ((ClassMap) typeMap.ObjectMap, ob, false);
+			ReadClassInstanceMembers (typeMap, ob);
 
 			if (isEmpty) Reader.Skip();
 			else ReadEndElement();
@@ -154,6 +165,11 @@ namespace System.Xml.Serialization
 			return ob;
 		}
 
+		protected virtual void ReadClassInstanceMembers (XmlTypeMapping typeMap, object ob)
+		{
+			ReadMembers ((ClassMap) typeMap.ObjectMap, ob, false);
+		}
+
 		void ReadMembers (ClassMap map, object ob, bool isValueList)
 		{
 			// A value list cannot have attributes
@@ -196,7 +212,7 @@ namespace System.Xml.Serialization
 						AddListValue (anyAttrMember.TypeData, ref anyAttributeArray, anyAttributeIndex++, Document.ReadNode(Reader), true);
 					}
 					else
-						UnknownNode(ob);
+						ProcessUnknownAttribute(ob);
 				}
 
 				if (anyAttrMember != null)
@@ -307,7 +323,7 @@ namespace System.Xml.Serialization
 						else SetMemberValue (mem, ob, ReadXmlNode (false), isValueList);
 					}
 					else 
-						UnknownNode(ob);
+						ProcessUnknownElement(ob);
 				}
 				else if (Reader.NodeType == System.Xml.XmlNodeType.Text && map.XmlTextCollector != null)
 				{
@@ -357,6 +373,16 @@ namespace System.Xml.Serialization
 					SetMemberValue (member, fixup.Source, GetTarget(ids[member.Index]), isValueList);
 			}
 		}
+		
+		protected virtual void ProcessUnknownAttribute (object target)
+		{
+			UnknownNode (target);
+		}
+		
+		protected virtual void ProcessUnknownElement (object target)
+		{
+			UnknownNode (target);
+		}
 
 		bool IsReadOnly (XmlTypeMapMember member, object ob, bool isValueList)
 		{

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

@@ -15,7 +15,7 @@ using System.Xml.Schema;
 
 namespace System.Xml.Serialization
 {
-	public class XmlSerializationWriterInterpreter: XmlSerializationWriter
+	internal class XmlSerializationWriterInterpreter: XmlSerializationWriter
 	{
 		XmlMapping _typeMap;
 		SerializationFormat _format;