示例#1
0
        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));
            }
        }