Esempio n. 1
0
        public bool Read()
        {
            bool result = false;
            if (_State != TJsonReaderState.EOF)
            {
                TJsonReaderState newstate = TJsonReaderState.NotSet;
                bool valueSection = false;
                bool readAgain;
                do
                {
                    readAgain = false;
                    SkipWhitespace();
                    int item = _TextReader.Read();
                    if (item < 0)
                        newstate = TJsonReaderState.EOF;
                    else
                    {
                        switch (item)
                        {
                            case '{':
                                newstate = TJsonReaderState.Object;
                                UpLevel(false);
                                break;
                            case '}':
                                newstate = TJsonReaderState.EndObject;
                                DownLevel();
                                break;
                            case '[':
                                newstate = TJsonReaderState.Array;
                                UpLevel(true);
                                break;

                            case ']':
                                newstate = TJsonReaderState.EndArray;
                                DownLevel();
                                break;

                            case ',':
                                readAgain = true;
                                break;

                            case '"':
                                if (valueSection || _LevelIsArray[_Level])
                                    newstate = TJsonReaderState.String;
                                else
                                    newstate = TJsonReaderState.Member;
                                _StringValue = ParseString();
                                break;
                            case '0':
                            case '1':
                            case '2':
                            case '3':
                            case '4':
                            case '5':
                            case '6':
                            case '7':
                            case '8':
                            case '9':
                            case '-':
                            case '+':
                            case '.':
                                newstate = TJsonReaderState.Number;
                                _StringValue = ParseNumber(item);
                                break;
                            case ':':
                                valueSection = true;
                                readAgain = true;
                                break;

                            case 'f':
                                item = _TextReader.Read();
                                if (item == 'a')
                                {
                                    item = _TextReader.Read();
                                    if (item == 'l')
                                    {
                                        item = _TextReader.Read();
                                        if (item == 's')
                                        {
                                            item = _TextReader.Read();
                                            if (item == 'e')
                                            {
                                                newstate = TJsonReaderState.Boolean;
                                                _BooleanValue = false;
                                            }
                                        }
                                    }
                                }
                                break;

                            case 't':
                                item = _TextReader.Read();
                                if (item == 'r')
                                {
                                    item = _TextReader.Read();
                                    if (item == 'u')
                                    {
                                        item = _TextReader.Read();
                                        if (item == 'e')
                                        {
                                            newstate = TJsonReaderState.Boolean;
                                            _BooleanValue = true;
                                        }
                                    }
                                }
                                break;

                            case 'n':
                                item = _TextReader.Read();
                                if (item == 'u')
                                {
                                    item = _TextReader.Read();
                                    if (item == 'l')
                                    {
                                        item = _TextReader.Read();
                                        if (item == 'l')
                                        {
                                            newstate = TJsonReaderState.Null;
                                        }
                                    }
                                }
                                break;

                            default:
            #if SILVERLIGHT
                                throw new ArgumentException();
            #else
                                throw new InvalidDataException();
            #endif
                        }

                    }
                } while (readAgain);
                if ((newstate != TJsonReaderState.EOF) && (newstate != TJsonReaderState.NotSet))
                    result = true;
                _State = newstate;
            }
            return result;
        }
Esempio n. 2
0
        public bool Read()
        {
            bool result = false;

            if (_State != TJsonReaderState.EOF)
            {
                TJsonReaderState newstate     = TJsonReaderState.NotSet;
                bool             valueSection = false;
                bool             readAgain;
                do
                {
                    readAgain = false;
                    SkipWhitespace();
                    int item = _TextReader.Read();
                    if (item < 0)
                    {
                        newstate = TJsonReaderState.EOF;
                    }
                    else
                    {
                        switch (item)
                        {
                        case '{':
                            newstate = TJsonReaderState.Object;
                            UpLevel(false);
                            break;

                        case '}':
                            newstate = TJsonReaderState.EndObject;
                            DownLevel();
                            break;

                        case '[':
                            newstate = TJsonReaderState.Array;
                            UpLevel(true);
                            break;

                        case ']':
                            newstate = TJsonReaderState.EndArray;
                            DownLevel();
                            break;

                        case ',':
                            readAgain = true;
                            break;

                        case '"':
                            if (valueSection || _LevelIsArray[_Level])
                            {
                                newstate = TJsonReaderState.String;
                            }
                            else
                            {
                                newstate = TJsonReaderState.Member;
                            }
                            _StringValue = ParseString();
                            break;

                        case '0':
                        case '1':
                        case '2':
                        case '3':
                        case '4':
                        case '5':
                        case '6':
                        case '7':
                        case '8':
                        case '9':
                        case '-':
                        case '+':
                        case '.':
                            newstate     = TJsonReaderState.Number;
                            _StringValue = ParseNumber(item);
                            break;

                        case ':':
                            valueSection = true;
                            readAgain    = true;
                            break;

                        case 'f':
                            item = _TextReader.Read();
                            if (item == 'a')
                            {
                                item = _TextReader.Read();
                                if (item == 'l')
                                {
                                    item = _TextReader.Read();
                                    if (item == 's')
                                    {
                                        item = _TextReader.Read();
                                        if (item == 'e')
                                        {
                                            newstate      = TJsonReaderState.Boolean;
                                            _BooleanValue = false;
                                        }
                                    }
                                }
                            }
                            break;

                        case 't':
                            item = _TextReader.Read();
                            if (item == 'r')
                            {
                                item = _TextReader.Read();
                                if (item == 'u')
                                {
                                    item = _TextReader.Read();
                                    if (item == 'e')
                                    {
                                        newstate      = TJsonReaderState.Boolean;
                                        _BooleanValue = true;
                                    }
                                }
                            }
                            break;

                        case 'n':
                            item = _TextReader.Read();
                            if (item == 'u')
                            {
                                item = _TextReader.Read();
                                if (item == 'l')
                                {
                                    item = _TextReader.Read();
                                    if (item == 'l')
                                    {
                                        newstate = TJsonReaderState.Null;
                                    }
                                }
                            }
                            break;

                        default:
#if SILVERLIGHT
                            throw new ArgumentException();
#else
                            throw new InvalidDataException();
#endif
                        }
                    }
                } while (readAgain);
                if ((newstate != TJsonReaderState.EOF) && (newstate != TJsonReaderState.NotSet))
                {
                    result = true;
                }
                _State = newstate;
            }
            return(result);
        }