private object DeserializePrimitiveObject() { string input = DeserializePrimitiveToken(); if (input.Equals("null")) { return(null); } if (input.Equals(Globals.True)) { return(true); } if (input.Equals(Globals.False)) { return(false); } if (input.Equals(JsonGlobals.PositiveInf)) { return(float.PositiveInfinity); } if (input.Equals(JsonGlobals.NegativeInf)) { return(float.NegativeInfinity); } bool hasDecimalPoint = input.IndexOfAny(JsonGlobals.FloatingPointCharacters) >= 0; if (!hasDecimalPoint) { int parseInt; if (Int32.TryParse(input, NumberStyles.Float, CultureInfo.InvariantCulture, out parseInt)) { return(parseInt); } long parseLong; if (Int64.TryParse(input, NumberStyles.Float, CultureInfo.InvariantCulture, out parseLong)) { return(parseLong); } if (_isDataContract) { return(JavaScriptObjectDeserializer.ParseJsonNumberAsDoubleOrDecimal(input)); } } //Ensure that the number is a valid JSON number. object ret = JavaScriptObjectDeserializer.ParseJsonNumberAsDoubleOrDecimal(input); if (ret.GetType() == Globals.TypeOfString) { throw new SerializationException(SR.Format(SR.ObjectDeserializer_IllegalPrimitive, input)); } // return floating point number as string in DataContract case. return(_isDataContract ? input : ret); }
private object TryParseJsonNumber(object value) { string input = value as string; if (input != null && input.IndexOfAny(JsonGlobals.FloatingPointCharacters) >= 0) { return(JavaScriptObjectDeserializer.ParseJsonNumberAsDoubleOrDecimal(input)); } return(value); }