Imported Upstream version 6.0.0.172

Former-commit-id: f3cc9b82f3e5bd8f0fd3ebc098f789556b44e9cd
This commit is contained in:
Xamarin Public Jenkins (auto-signing)
2019-04-12 14:10:50 +00:00
parent 8016999e4d
commit 64ac736ec5
32155 changed files with 3981439 additions and 75368 deletions

View File

@ -204,11 +204,9 @@ namespace System.Xml.Serialization
{
if (isNullable && ReadNull()) return null;
if (checkType)
{
System.Xml.XmlQualifiedName t = GetXsiType();
if (t != null)
{
if (checkType) {
System.Xml.XmlQualifiedName t = GetXsiType();
if (t != null) {
XmlTypeMapping realMap = typeMap.GetRealElementMap (t.Name, t.Namespace);
if (realMap == null) {
if (typeMap.TypeData.Type == typeof(object))
@ -221,7 +219,12 @@ namespace System.Xml.Serialization
}
else if (typeMap.TypeData.Type == typeof(object))
return ReadTypedPrimitive (AnyType);
}
else {
XmlTypeMapping realMap = typeMap.GetRealElementMap (Reader.LocalName, Reader.NamespaceURI);
if (realMap != null && realMap != typeMap)
return ReadObject(realMap, false, false);
}
}
object ob = CreateInstance (typeMap.TypeData.Type, true);

View File

@ -389,7 +389,7 @@ namespace System.Xml.Serialization
return (XmlTypeMapMemberAttribute)_attributeMembers [BuildKey (name,ns, -1)];
}
public XmlTypeMapElementInfo GetElement(string name, string ns, int minimalOrder)
public XmlTypeMapElementInfo GetElement (string name, string ns, int minimalOrder)
{
if (_elements == null)
return null;
@ -404,22 +404,38 @@ namespace System.Xml.Serialization
selected = info;
}
}
else if (info.MappedType != null && info.MappedType.DerivedTypes.Count > 0) {
foreach (XmlTypeMapping derrivedInfo in info.MappedType.DerivedTypes) {
if (derrivedInfo.ElementName == name && derrivedInfo.Namespace == ns) {
if (info.ExplicitOrder < minimalOrder)
continue;
if (selected == null || selected.ExplicitOrder > info.ExplicitOrder) {
selected = info;
}
}
}
}
}
return selected;
}
public XmlTypeMapElementInfo GetElement(string name, string ns)
public XmlTypeMapElementInfo GetElement (string name, string ns)
{
if (_elements == null) return null;
foreach (XmlTypeMapElementInfo info in _elements.Values)
if (info.ElementName == name && info.Namespace == ns)
return info;
else if (info.MappedType != null && info.MappedType.DerivedTypes.Count > 0) {
foreach (XmlTypeMapping derrivedInfo in info.MappedType.DerivedTypes)
if (derrivedInfo.ElementName == name && derrivedInfo.Namespace == ns)
return info;
}
return null;
}
public XmlTypeMapElementInfo GetElement (int index)
{
if (_elements == null) return null;