Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ ReadArray()

object System.Xml.Serialization.XmlSerializationReader.ReadArray ( string typeName,
string typeNs )
inlineprivate

Definition at line 1831 of file XmlSerializationReader.cs.

1832 {
1833 Type type = null;
1834 SoapArrayInfo soapArrayInfo;
1835 if (_soap12)
1836 {
1839 Type type2 = (Type)_types[new XmlQualifiedName(typeName, typeNs)];
1840 if (attribute == null && attribute2 == null && (type2 == null || !type2.IsArray))
1841 {
1842 return null;
1843 }
1845 if (type2 != null)
1846 {
1847 type = TypeScope.GetArrayElementType(type2, null);
1848 }
1849 }
1850 else
1851 {
1853 if (attribute3 == null)
1854 {
1855 return null;
1856 }
1858 }
1859 if (soapArrayInfo.dimensions != 1)
1860 {
1862 }
1863 Type type3 = null;
1864 XmlQualifiedName xmlQualifiedName = new XmlQualifiedName(_urTypeID, _schemaNsID);
1865 XmlQualifiedName xmlQualifiedName2;
1866 if (soapArrayInfo.qname.Length > 0)
1867 {
1870 }
1871 else
1872 {
1874 }
1875 if (_soap12 && type3 == typeof(object))
1876 {
1877 type3 = null;
1878 }
1879 bool flag;
1880 if (type3 == null)
1881 {
1882 if (!_soap12)
1883 {
1885 flag = true;
1886 }
1887 else
1888 {
1890 {
1892 }
1893 if (type3 != null)
1894 {
1895 flag = true;
1896 }
1897 else if (type == null)
1898 {
1899 type3 = typeof(object);
1900 flag = false;
1901 }
1902 else
1903 {
1904 type3 = type;
1905 XmlQualifiedName xmlQualifiedName3 = (XmlQualifiedName)_typesReverse[type3];
1906 if (xmlQualifiedName3 == null)
1907 {
1908 xmlQualifiedName3 = XmlSerializationWriter.GetPrimitiveTypeNameInternal(type3);
1909 flag = true;
1910 }
1911 else
1912 {
1913 flag = type3.IsPrimitive;
1914 }
1915 if (xmlQualifiedName3 != null)
1916 {
1918 }
1919 }
1920 }
1921 }
1922 else
1923 {
1924 flag = type3.IsPrimitive;
1925 }
1926 if (!_soap12 && soapArrayInfo.jaggedDimensions > 0)
1927 {
1928 for (int i = 0; i < soapArrayInfo.jaggedDimensions; i++)
1929 {
1930 type3 = type3.MakeArrayType();
1931 }
1932 }
1933 if (_r.IsEmptyElement)
1934 {
1935 _r.Skip();
1936 return Array.CreateInstance(type3, 0);
1937 }
1939 _r.MoveToContent();
1940 int num = 0;
1941 Array array = null;
1942 if (type3.IsValueType)
1943 {
1944 if (!flag && !type3.IsEnum)
1945 {
1946 throw new NotSupportedException(System.SR.Format(System.SR.XmlRpcArrayOfValueTypes, type3.FullName));
1947 }
1948 while (_r.NodeType != XmlNodeType.EndElement)
1949 {
1951 array.SetValue(ReadReferencedElement(xmlQualifiedName2.Name, xmlQualifiedName2.Namespace), num);
1952 num++;
1953 _r.MoveToContent();
1954 }
1956 }
1957 else
1958 {
1959 string[] array2 = null;
1960 int num2 = 0;
1961 while (_r.NodeType != XmlNodeType.EndElement)
1962 {
1964 array2 = (string[])EnsureArrayIndex(array2, num2, typeof(string));
1965 string name;
1966 string ns;
1967 if (_r.NamespaceURI.Length != 0)
1968 {
1969 name = _r.LocalName;
1970 ns = (((object)_r.NamespaceURI != _soapNsID) ? _r.NamespaceURI : "http://www.w3.org/2001/XMLSchema");
1971 }
1972 else
1973 {
1974 name = xmlQualifiedName2.Name;
1975 ns = xmlQualifiedName2.Namespace;
1976 }
1977 array.SetValue(ReadReferencingElement(name, ns, out array2[num2]), num);
1978 num++;
1979 num2++;
1980 _r.MoveToContent();
1981 }
1982 if (_soap12 && type3 == typeof(object))
1983 {
1984 Type type4 = null;
1985 for (int j = 0; j < num; j++)
1986 {
1987 object value = array.GetValue(j);
1988 if (value != null)
1989 {
1990 Type type5 = value.GetType();
1991 if (type5.IsValueType)
1992 {
1993 type4 = null;
1994 break;
1995 }
1996 if (type4 == null || type5.IsAssignableFrom(type4))
1997 {
1998 type4 = type5;
1999 }
2000 else if (!type4.IsAssignableFrom(type5))
2001 {
2002 type4 = null;
2003 break;
2004 }
2005 }
2006 }
2007 if (type4 != null)
2008 {
2009 type3 = type4;
2010 }
2011 }
2012 array2 = (string[])ShrinkArray(array2, num2, typeof(string), isNullable: false);
2014 Fixup fixup = new Fixup(array, FixupArrayRefs, array2);
2015 AddFixup(fixup);
2016 }
2018 return array;
2019 }
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string XmlInvalidArrayDimentions
Definition SR.cs:1536
static string XmlRpcArrayOfValueTypes
Definition SR.cs:1630
Definition SR.cs:7
Array? ShrinkArray(Array? a, int length, Type elementType, bool isNullable)
SoapArrayInfo ParseSoap12ArrayType(string itemType, string arraySize)
Array EnsureArrayIndex(Array? a, int index, Type elementType)
Type GetPrimitiveType(XmlQualifiedName typeName, bool throwOnUnknown)
object? ReadReferencingElement(out string? fixupReference)
string? GetAttribute(string name)
virtual void Skip()
Definition XmlReader.cs:532
virtual void ReadStartElement()
Definition XmlReader.cs:629
virtual XmlNodeType MoveToContent()
Definition XmlReader.cs:604
XmlNodeType NodeType
Definition XmlReader.cs:62

References System.Xml.Serialization.XmlSerializationReader._arraySizeID, System.Xml.Serialization.XmlSerializationReader._arrayTypeID, System.Xml.Serialization.XmlSerializationReader._itemTypeID, System.Xml.Serialization.XmlSerializationReader._r, System.Xml.Serialization.XmlSerializationReader._schemaNsID, System.Xml.Serialization.XmlSerializationReader._soap12, System.Xml.Serialization.XmlSerializationReader._soap12NsID, System.Xml.Serialization.XmlSerializationReader._soapNsID, System.Xml.Serialization.XmlSerializationReader._types, System.Xml.Serialization.XmlSerializationReader._typesReverse, System.Xml.Serialization.XmlSerializationReader._urTypeID, System.Xml.Serialization.XmlSerializationReader.AddFixup(), System.array, System.Array.CreateInstance(), System.Xml.Serialization.XmlSerializationReader.CurrentTag(), System.Xml.Dictionary, System.Xml.Serialization.XmlSerializationReader.EnsureArrayIndex(), System.Xml.Serialization.XmlSerializationReader.FixupArrayRefs(), System.SR.Format(), System.Xml.Serialization.TypeScope.GetArrayElementType(), System.Xml.XmlReader.GetAttribute(), System.Xml.Serialization.XmlSerializationReader.GetPrimitiveType(), System.Xml.Serialization.XmlSerializationWriter.GetPrimitiveTypeNameInternal(), System.Xml.XmlReader.IsEmptyElement, System.Xml.XmlReader.LocalName, System.Xml.XmlReader.MoveToContent(), System.Xml.XmlReader.NamespaceURI, System.Xml.XmlReader.NodeType, System.Xml.Serialization.XmlSerializationReader.ParseArrayType(), System.Xml.Serialization.XmlSerializationReader.ParseSoap12ArrayType(), System.Xml.Serialization.XmlSerializationReader.ReadEndElement(), System.Xml.Serialization.XmlSerializationReader.ReadReferencedElement(), System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement(), System.Xml.XmlReader.ReadStartElement(), System.Xml.Serialization.XmlSerializationReader.ShrinkArray(), System.Xml.XmlReader.Skip(), System.Xml.Serialization.XmlSerializationReader.ToXmlQualifiedName(), System.type, System.Xml.Serialization.Type, System.value, System.SR.XmlInvalidArrayDimentions, and System.SR.XmlRpcArrayOfValueTypes.

Referenced by System.Xml.Serialization.XmlSerializationReader.ReadReferencingElement().