-Fixed JsonReader.ReadAsDouble with a JValue BigInteger

This commit is contained in:
James Newton-King
2016-04-29 18:49:22 +12:00
parent fe001bd5e6
commit 5b04a61dd9
2 changed files with 29 additions and 3 deletions
@@ -51,6 +51,20 @@ namespace Newtonsoft.Json.Tests.Linq
[TestFixture]
public class JTokenReaderTest : TestFixtureBase
{
#if !(NET20 || NET35 || PORTABLE40 || PORTABLE)
[Test]
public void ConvertBigIntegerToDouble()
{
var jObject = JObject.Parse("{ maxValue:10000000000000000000}");
JsonReader reader = jObject.CreateReader();
Assert.IsTrue(reader.Read());
Assert.IsTrue(reader.Read());
Assert.AreEqual(10000000000000000000d, reader.ReadAsDouble());
Assert.IsTrue(reader.Read());
}
#endif
[Test]
public void ErrorTokenIndex()
{
+15 -3
View File
@@ -622,12 +622,24 @@ namespace Newtonsoft.Json
case JsonToken.Float:
if (!(Value is double))
{
SetToken(JsonToken.Float, Convert.ToDouble(Value, CultureInfo.InvariantCulture), false);
double d;
#if !(NET20 || NET35 || PORTABLE40 || PORTABLE)
if (Value is BigInteger)
{
d = (double)(BigInteger)Value;
}
else
#endif
{
d = Convert.ToDouble(Value, CultureInfo.InvariantCulture);
}
SetToken(JsonToken.Float, d, false);
}
return (double) Value;
return (double)Value;
case JsonToken.String:
return ReadDoubleString((string) Value);
return ReadDoubleString((string)Value);
}
throw JsonReaderException.Create(this, "Error reading double. Unexpected token: {0}.".FormatWith(CultureInfo.InvariantCulture, t));