SLJsonNode ParseValue(SLJsonTokenizer tokenizer) { if (tokenizer.HasSpecialChar) { switch (tokenizer.SpecialChar) { case '{': return(ParseObject(tokenizer)); case '[': return(ParseArray(tokenizer)); default: throw new SLJsonException("Unexpected token: " + tokenizer.SpecialChar.ToString()); } } if (tokenizer.TokenIsString) { return(new SLJsonNode(SLJsonNodeType.String, tokenizer.Token)); } string t = tokenizer.Token; switch (t) { case "null": return(new SLJsonNode(SLJsonNodeType.Null, null)); case "false": case "true": return(new SLJsonNode(SLJsonNodeType.Boolean, t)); default: if (!IsNumericCheckDisabled) { double d; if (!SLJsonConvert.TryParse(t, out d)) { throw new SLJsonException("Numeric value expected"); } t = SLJsonConvert.ToString(d); // Normalize numeric value } return(new SLJsonNode(SLJsonNodeType.Number, t)); } }