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);
}
}