Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs')
-rw-r--r--mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs11
1 files changed, 9 insertions, 2 deletions
diff --git a/mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs b/mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs
index aded011e986..f70bd99464b 100644
--- a/mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs
+++ b/mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs
@@ -646,8 +646,15 @@ namespace System.Xml.Serialization
{
if (memberValue == null) return null;
Type type = memberValue.GetType();
- foreach (XmlTypeMapElementInfo elem in _itemInfo)
- if (elem.TypeData.Type == type) return elem;
+ XmlTypeMapElementInfo bestMatch = null;
+ foreach (XmlTypeMapElementInfo elem in _itemInfo) {
+ if (elem.TypeData.Type == type)
+ return elem;
+ if (elem.TypeData.Type.IsAssignableFrom (type) &&
+ (bestMatch == null || elem.TypeData.Type.IsAssignableFrom (bestMatch.TypeData.Type)))
+ bestMatch = elem;
+ }
+ return bestMatch;
}
return null;
}