예제 #1
0
        internal BsonValue ReadValue(JsonToken token)
        {
            switch (token.TokenType)
            {
                case JsonTokenType.String: return token.Token;
                case JsonTokenType.BeginDoc: return this.ReadObject();
                case JsonTokenType.BeginArray: return this.ReadArray();
                case JsonTokenType.Number: return token.Token.Contains(".") ?
                    new BsonValue(Convert.ToDouble(token.Token, CultureInfo.InvariantCulture.NumberFormat)) :
                    new BsonValue(Convert.ToInt32(token.Token));
                case JsonTokenType.Word:
                    switch (token.Token)
                    {
                        case "null": return BsonValue.Null;
                        case "true": return true;
                        case "false": return false;
                        default: throw LiteException.UnexpectedToken(token.Token);
                    }
            }

            throw LiteException.UnexpectedToken(token.Token);
        }
예제 #2
0
        /// <summary>
        /// Read next json token
        /// </summary>
        public JsonToken ReadToken()
        {
            this.EatWhitespace();

            if (this.EOF)
            {
                return new JsonToken { TokenType = JsonTokenType.EOF };
            }

            JsonToken token = null;

            switch (_current)
            {
                case '[':
                    token = new JsonToken { TokenType = JsonTokenType.BeginArray, Token = "[" };
                    this.Read();
                    break;

                case ']':
                    token = new JsonToken { TokenType = JsonTokenType.EndArray, Token = "]" };
                    this.Read();
                    break;

                case '{':
                    token = new JsonToken { TokenType = JsonTokenType.BeginDoc, Token = "{" };
                    this.Read();
                    break;

                case '}':
                    token = new JsonToken { TokenType = JsonTokenType.EndDoc, Token = "}" };
                    this.Read();
                    break;

                case ':':
                    token = new JsonToken { TokenType = JsonTokenType.Colon, Token = ":" };
                    this.Read();
                    break;

                case ',':
                    token = new JsonToken { TokenType = JsonTokenType.Comma, Token = "," };
                    this.Read();
                    break;

                case '\"':
                    token = new JsonToken { TokenType = JsonTokenType.String, Token = this.ReadString() };
                    break;

                case '-':
                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                case '9':
                    token = new JsonToken { TokenType = JsonTokenType.Number, Token = this.ReadNumber() };
                    break;

                default:
                    token = new JsonToken { TokenType = JsonTokenType.Word, Token = this.ReadWord() };
                    break;
            }

            return token;
        }
예제 #3
0
        /// <summary>
        ///     Read next json token
        /// </summary>
        public JsonToken ReadToken()
        {
            EatWhitespace();

            if (EOF)
            {
                return(new JsonToken {
                    TokenType = JsonTokenType.EOF
                });
            }

            JsonToken token = null;

            switch (_current)
            {
            case '[':
                token = new JsonToken {
                    TokenType = JsonTokenType.BeginArray, Token = "["
                };
                Read();
                break;

            case ']':
                token = new JsonToken {
                    TokenType = JsonTokenType.EndArray, Token = "]"
                };
                Read();
                break;

            case '{':
                token = new JsonToken {
                    TokenType = JsonTokenType.BeginDoc, Token = "{"
                };
                Read();
                break;

            case '}':
                token = new JsonToken {
                    TokenType = JsonTokenType.EndDoc, Token = "}"
                };
                Read();
                break;

            case ':':
                token = new JsonToken {
                    TokenType = JsonTokenType.Colon, Token = ":"
                };
                Read();
                break;

            case ',':
                token = new JsonToken {
                    TokenType = JsonTokenType.Comma, Token = ","
                };
                Read();
                break;

            case '\"':
                token = new JsonToken {
                    TokenType = JsonTokenType.String, Token = ReadString()
                };
                break;

            case '-':
            case '0':
            case '1':
            case '2':
            case '3':
            case '4':
            case '5':
            case '6':
            case '7':
            case '8':
            case '9':
                token = new JsonToken {
                    TokenType = JsonTokenType.Number, Token = ReadNumber()
                };
                break;

            default:
                token = new JsonToken {
                    TokenType = JsonTokenType.Word, Token = ReadWord()
                };
                break;
            }

            return(token);
        }