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; }
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); }