Example #1
0
        private void HandleValue(Token <SimpleTokenizer.TokenType> token)
        {
            switch (token.Type)
            {
            case SimpleTokenizer.TokenType.Separator:
                if (token.Length == 1)
                {
                    if (token[0] == '[')
                    {
                        StartArray();
                        return;
                    }

                    if (token[0] == ']')
                    {
                        EndArray();
                        return;
                    }

                    if (token[0] == '{')
                    {
                        StartObject();
                        return;
                    }

                    if (token[0] == '}')
                    {
                        EndObject();
                        return;
                    }

                    if (token[0] == ',')
                    {
                        _reader.OnNull();
                        NextAttributeOrEndOfObject(token);
                    }
                }

                break;

            case SimpleTokenizer.TokenType.Int:
                _reader.OnInteger(long.Parse(token.ToString(), CultureInfo.InvariantCulture));
                _currentHandler = NextAttributeOrEndOfObject;
                return;

            case SimpleTokenizer.TokenType.Float:
                _reader.OnFloat(double.Parse(token.ToString(), CultureInfo.InvariantCulture));
                _currentHandler = NextAttributeOrEndOfObject;
                return;

            case SimpleTokenizer.TokenType.CharConstant:
            case SimpleTokenizer.TokenType.StringConstant:
            case SimpleTokenizer.TokenType.String:
                _reader.OnString(token.ToString());
                _currentHandler = NextAttributeOrEndOfObject;
                return;

            case SimpleTokenizer.TokenType.Id:
                var tokenStr = token.ToString();
                if (0 == string.Compare(tokenStr, "true", StringComparison.CurrentCultureIgnoreCase))
                {
                    _reader.OnBool(true);
                }
                else if (0 == string.Compare(tokenStr, "false", StringComparison.CurrentCultureIgnoreCase))
                {
                    _reader.OnBool(false);
                }
                else if (0 == string.Compare(tokenStr, "null", StringComparison.CurrentCultureIgnoreCase))
                {
                    _reader.OnNull();
                }
                else
                {
                    _reader.OnString(tokenStr);
                }

                _currentHandler = NextAttributeOrEndOfObject;
                break;

            default:
                throw new FormatException("Expected attribute value");
            }
        }