private object ValueAsObject()

in src/dotnet-svcutil/lib/src/FrameworkFork/Microsoft.Xml/Xml/BinaryXml/XmlBinaryReader.cs [4067:4205]


        private object ValueAsObject(BinXmlToken token, bool returnInternalTypes)
        {
            CheckValueTokenBounds();
            switch (token)
            {
                case BinXmlToken.SQL_NCHAR:
                case BinXmlToken.SQL_NVARCHAR:
                case BinXmlToken.SQL_NTEXT:
                    return GetString(_tokDataPos, _tokLen);

                case BinXmlToken.XSD_BOOLEAN:
                    return (0 != _data[_tokDataPos]);

                case BinXmlToken.SQL_BIT:
                    return (Int32)_data[_tokDataPos];

                case BinXmlToken.SQL_TINYINT:
                    return _data[_tokDataPos];

                case BinXmlToken.SQL_SMALLINT:
                    return GetInt16(_tokDataPos);

                case BinXmlToken.SQL_INT:
                    return GetInt32(_tokDataPos);

                case BinXmlToken.SQL_BIGINT:
                    return GetInt64(_tokDataPos);

                case BinXmlToken.XSD_BYTE:
                    {
                        sbyte v = unchecked((sbyte)_data[_tokDataPos]);
                        return v;
                    }

                case BinXmlToken.XSD_UNSIGNEDSHORT:
                    return GetUInt16(_tokDataPos);

                case BinXmlToken.XSD_UNSIGNEDINT:
                    return GetUInt32(_tokDataPos);

                case BinXmlToken.XSD_UNSIGNEDLONG:
                    return GetUInt64(_tokDataPos);

                case BinXmlToken.SQL_REAL:
                    return GetSingle(_tokDataPos);

                case BinXmlToken.SQL_FLOAT:
                    return GetDouble(_tokDataPos);

                case BinXmlToken.SQL_UUID:
                    {
                        int a; short b, c;
                        int pos = _tokDataPos;
                        a = GetInt32(pos);
                        b = GetInt16(pos + 4);
                        c = GetInt16(pos + 6);
                        Guid v = new Guid(a, b, c, _data[pos + 8], _data[pos + 9], _data[pos + 10], _data[pos + 11], _data[pos + 12], _data[pos + 13], _data[pos + 14], _data[pos + 15]);
                        return v.ToString();
                    }

                case BinXmlToken.SQL_SMALLMONEY:
                    {
                        BinXmlSqlMoney v = new BinXmlSqlMoney(GetInt32(_tokDataPos));
                        if (returnInternalTypes)
                            return v;
                        else
                            return v.ToDecimal();
                    }

                case BinXmlToken.SQL_MONEY:
                    {
                        BinXmlSqlMoney v = new BinXmlSqlMoney(GetInt64(_tokDataPos));
                        if (returnInternalTypes)
                            return v;
                        else
                            return v.ToDecimal();
                    }

                case BinXmlToken.XSD_DECIMAL:
                case BinXmlToken.SQL_DECIMAL:
                case BinXmlToken.SQL_NUMERIC:
                    {
                        BinXmlSqlDecimal v = new BinXmlSqlDecimal(_data, _tokDataPos, token == BinXmlToken.XSD_DECIMAL);
                        if (returnInternalTypes)
                            return v;
                        else
                            return v.ToDecimal();
                    }

                case BinXmlToken.SQL_CHAR:
                case BinXmlToken.SQL_VARCHAR:
                case BinXmlToken.SQL_TEXT:
                    {
                        int pos = _tokDataPos;
                        int codepage = GetInt32(pos);
                        Encoding enc = System.Text.Encoding.GetEncoding(codepage);
                        return enc.GetString(_data, pos + 4, _tokLen - 4);
                    }

                case BinXmlToken.SQL_VARBINARY:
                case BinXmlToken.SQL_BINARY:
                case BinXmlToken.SQL_IMAGE:
                case BinXmlToken.SQL_UDT:
                case BinXmlToken.XSD_BASE64:
                case BinXmlToken.XSD_BINHEX:
                    {
                        byte[] data = new byte[_tokLen];
                        Array.Copy(_data, _tokDataPos, data, 0, _tokLen);
                        return data;
                    }

                case BinXmlToken.SQL_DATETIME:
                case BinXmlToken.SQL_SMALLDATETIME:
                case BinXmlToken.XSD_TIME:
                case BinXmlToken.XSD_DATE:
                case BinXmlToken.XSD_DATETIME:
                case BinXmlToken.XSD_KATMAI_DATE:
                case BinXmlToken.XSD_KATMAI_DATETIME:
                case BinXmlToken.XSD_KATMAI_TIME:
                    return ValueAsDateTime();

                case BinXmlToken.XSD_KATMAI_DATEOFFSET:
                case BinXmlToken.XSD_KATMAI_DATETIMEOFFSET:
                case BinXmlToken.XSD_KATMAI_TIMEOFFSET:
                    return ValueAsDateTimeOffset();

                case BinXmlToken.XSD_QNAME:
                    {
                        int nameNum = ParseMB32(_tokDataPos);
                        if (nameNum < 0 || nameNum >= _symbolTables.qnameCount)
                            throw new XmlException(ResXml.XmlBin_InvalidQNameID, String.Empty);
                        QName qname = _symbolTables.qnametable[nameNum];
                        return new XmlQualifiedName(qname.localname, qname.namespaceUri);
                    }

                default:
                    throw ThrowUnexpectedToken(_token);
            }
        }