-Fix reading hexadecimal numbers that contain an e
This commit is contained in:
@@ -671,5 +671,26 @@ bye", reader.Value);
|
||||
|
||||
Assert.IsFalse(reader.Read());
|
||||
}
|
||||
|
||||
[Test]
|
||||
public void ReadHexidecimalWithAllLetters()
|
||||
{
|
||||
string json = @"{""text"":0xabcdef12345}";
|
||||
|
||||
JsonTextReader reader = new JsonTextReader(new StringReader(json));
|
||||
|
||||
Assert.IsTrue(reader.Read());
|
||||
Assert.AreEqual(JsonToken.StartObject, reader.TokenType);
|
||||
|
||||
Assert.IsTrue(reader.Read());
|
||||
Assert.AreEqual(JsonToken.PropertyName, reader.TokenType);
|
||||
|
||||
Assert.IsTrue(reader.Read());
|
||||
Assert.AreEqual(JsonToken.Integer, reader.TokenType);
|
||||
Assert.AreEqual(11806310474565, reader.Value);
|
||||
|
||||
Assert.IsTrue(reader.Read());
|
||||
Assert.AreEqual(JsonToken.EndObject, reader.TokenType);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -671,7 +671,6 @@ namespace Newtonsoft.Json
|
||||
private void ParseNumber(char firstChar)
|
||||
{
|
||||
char currentChar = firstChar;
|
||||
bool nonBase10 = (firstChar == '0');
|
||||
|
||||
// parse until seperator character or end
|
||||
bool end = false;
|
||||
@@ -693,18 +692,17 @@ namespace Newtonsoft.Json
|
||||
object numberValue;
|
||||
JsonToken numberType;
|
||||
|
||||
if (number.IndexOf(".", StringComparison.OrdinalIgnoreCase) != -1
|
||||
|| number.IndexOf("e", StringComparison.OrdinalIgnoreCase) != -1)
|
||||
{
|
||||
numberValue = Convert.ToDouble(number, CultureInfo.InvariantCulture);
|
||||
numberType = JsonToken.Float;
|
||||
}
|
||||
else if (nonBase10)
|
||||
if (firstChar == '0' && !number.StartsWith("0.", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
numberValue = number.StartsWith("0x", StringComparison.OrdinalIgnoreCase)
|
||||
? Convert.ToInt64(number, 16)
|
||||
: Convert.ToInt64(number, 8);
|
||||
numberType = JsonToken.Integer;
|
||||
}
|
||||
else if (number.IndexOf(".", StringComparison.OrdinalIgnoreCase) != -1 || number.IndexOf("e", StringComparison.OrdinalIgnoreCase) != -1)
|
||||
{
|
||||
numberValue = Convert.ToDouble(number, CultureInfo.InvariantCulture);
|
||||
numberType = JsonToken.Float;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user