diff options
Diffstat (limited to 'mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs')
-rw-r--r-- | mcs/class/System.XML/System.Xml.Serialization/XmlTypeMapping.cs | 11 |
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; } |