in src/dotnet-svcutil/lib/src/FrameworkFork/Microsoft.Xml/Xml/BinaryXml/XmlBinaryReader.cs [3940:4065]
private string ValueAsString(BinXmlToken token)
{
try
{
CheckValueTokenBounds();
switch (token)
{
case BinXmlToken.SQL_NCHAR:
case BinXmlToken.SQL_NVARCHAR:
case BinXmlToken.SQL_NTEXT:
return GetString(_tokDataPos, _tokLen);
case BinXmlToken.XSD_BOOLEAN:
{
if (0 == _data[_tokDataPos])
return "false";
else
return "true";
}
case BinXmlToken.SQL_BIT:
case BinXmlToken.SQL_TINYINT:
case BinXmlToken.SQL_SMALLINT:
case BinXmlToken.SQL_INT:
case BinXmlToken.SQL_BIGINT:
case BinXmlToken.XSD_BYTE:
case BinXmlToken.XSD_UNSIGNEDSHORT:
case BinXmlToken.XSD_UNSIGNEDINT:
return ValueAsLong().ToString(CultureInfo.InvariantCulture);
case BinXmlToken.XSD_UNSIGNEDLONG:
return ValueAsULong().ToString(CultureInfo.InvariantCulture);
case BinXmlToken.SQL_REAL:
return XmlConvert.ToString(GetSingle(_tokDataPos));
case BinXmlToken.SQL_FLOAT:
return XmlConvert.ToString(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));
return v.ToString();
}
case BinXmlToken.SQL_MONEY:
{
BinXmlSqlMoney v = new BinXmlSqlMoney(GetInt64(_tokDataPos));
return v.ToString();
}
case BinXmlToken.XSD_DECIMAL:
case BinXmlToken.SQL_DECIMAL:
case BinXmlToken.SQL_NUMERIC:
{
BinXmlSqlDecimal v = new BinXmlSqlDecimal(_data, _tokDataPos, token == BinXmlToken.XSD_DECIMAL);
return v.ToString();
}
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:
{
return Convert.ToBase64String(_data, _tokDataPos, _tokLen);
}
case BinXmlToken.XSD_BINHEX:
return BinHexEncoder.Encode(_data, _tokDataPos, _tokLen);
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:
case BinXmlToken.XSD_KATMAI_DATEOFFSET:
case BinXmlToken.XSD_KATMAI_DATETIMEOFFSET:
case BinXmlToken.XSD_KATMAI_TIMEOFFSET:
return ValueAsDateTimeString();
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];
if (qname.prefix.Length == 0)
return qname.localname;
else
return String.Concat(qname.prefix, ":", qname.localname);
}
default:
throw ThrowUnexpectedToken(_token);
}
}
catch
{
_state = ScanState.Error;
throw;
}
}