-Fixed JsonReader.ReadAsDouble with a JValue BigInteger
This commit is contained in:
@@ -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()
|
||||
{
|
||||
|
||||
@@ -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));
|
||||
|
||||
Reference in New Issue
Block a user