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