/// <inheritdoc />
            public override Number64 GetNumber64Value(IJsonNavigatorNode node)
            {
                if (!(node is NumberNode numberNode))
                {
                    throw new ArgumentException($"{node} was not of type: {nameof(NumberNode)}.");
                }

                Number64 value = JsonTextParser.GetNumberValue(numberNode.BufferedToken.Span);

                return(value);
            }
コード例 #2
0
            /// <inheritdoc />
            public override UtfAnyString GetStringValue()
            {
                if (this.TryGetBufferedStringValue(out Utf8Memory memory))
                {
                    return(Utf8String.UnsafeFromUtf8BytesNoValidation(memory.Memory));
                }

                ReadOnlyMemory <byte> stringToken = this.jsonTextBuffer.GetBufferedRawJsonToken(
                    this.token.Start,
                    this.token.End);

                return(JsonTextParser.GetStringValue(Utf8Memory.UnsafeCreateNoValidation(stringToken)));
            }
コード例 #3
0
                /// <summary>
                /// Parses out a JSON array AST node with a jsonTextReader.
                /// </summary>
                /// <param name="jsonTextReader">The reader to use as a lexer / tokenizer</param>
                /// <returns>JSON array AST node</returns>
                private static ArrayNode ParseArrayNode(IJsonReader jsonTextReader)
                {
                    List <JsonTextNode> items = new List <JsonTextNode>();

                    // consume the begin array token
                    jsonTextReader.Read();

                    while (jsonTextReader.CurrentTokenType != JsonTokenType.EndArray)
                    {
                        items.Add(JsonTextParser.ParseNode(jsonTextReader));
                    }

                    // consume the end array token
                    jsonTextReader.Read();

                    return(ArrayNode.Create(items));
                }
コード例 #4
0
                /// <summary>
                /// Parses out a JSON object AST node with a jsonTextReader.
                /// </summary>
                /// <param name="jsonTextReader">The reader to use as a lexer / tokenizer</param>
                /// <returns>JSON object AST node</returns>
                private static ObjectNode ParseObjectNode(IJsonReader jsonTextReader)
                {
                    List <ObjectProperty> properties = new List <ObjectProperty>();

                    // consume the begin object token
                    jsonTextReader.Read();

                    while (jsonTextReader.CurrentTokenType != JsonTokenType.EndObject)
                    {
                        ObjectProperty property = JsonTextParser.ParsePropertyNode(jsonTextReader);
                        properties.Add(property);
                    }

                    // consume the end object token
                    jsonTextReader.Read();

                    return(ObjectNode.Create(properties));
                }
コード例 #5
0
                /// <summary>
                /// Gets the root node of a JSON AST from a jsonTextReader.
                /// </summary>
                /// <param name="jsonTextReader">The reader to use as a lexer / tokenizer</param>
                /// <returns>The root node of a JSON AST from a jsonTextReader.</returns>
                public static JsonTextNode Parse(IJsonReader jsonTextReader)
                {
                    if (jsonTextReader.SerializationFormat != JsonSerializationFormat.Text)
                    {
                        throw new ArgumentException("jsonTextReader's serialization format must actually be text");
                    }

                    // Read past the json object not started state.
                    jsonTextReader.Read();

                    JsonTextNode rootNode = JsonTextParser.ParseNode(jsonTextReader);

                    // Make sure that we are at the end of the file.
                    if (jsonTextReader.Read())
                    {
                        throw new ArgumentException("Did not fully parse json");
                    }

                    return(rootNode);
                }
コード例 #6
0
                /// <summary>
                /// Parses out a JSON AST node with a jsonTextReader.
                /// </summary>
                /// <param name="jsonTextReader">The reader to use as a lexer / tokenizer</param>
                /// <returns>JSON AST node (type determined by the reader)</returns>
                private static JsonTextNode ParseNode(IJsonReader jsonTextReader)
                {
                    JsonTextNode node;

                    switch (jsonTextReader.CurrentTokenType)
                    {
                    case JsonTokenType.BeginArray:
                        node = JsonTextParser.ParseArrayNode(jsonTextReader);
                        break;

                    case JsonTokenType.BeginObject:
                        node = JsonTextParser.ParseObjectNode(jsonTextReader);
                        break;

                    case JsonTokenType.String:
                        node = JsonTextParser.ParseStringNode(jsonTextReader);
                        break;

                    case JsonTokenType.Number:
                        node = JsonTextParser.ParseNumberNode(jsonTextReader);
                        break;

                    case JsonTokenType.True:
                        node = JsonTextParser.ParseTrueNode(jsonTextReader);
                        break;

                    case JsonTokenType.False:
                        node = JsonTextParser.ParseFalseNode(jsonTextReader);
                        break;

                    case JsonTokenType.Null:
                        node = JsonTextParser.ParseNullNode(jsonTextReader);
                        break;

                    default:
                        throw new JsonInvalidTokenException();
                    }

                    return(node);
                }
コード例 #7
0
            /// <inheritdoc />
            public override Number64 GetNumberValue()
            {
                ReadOnlySpan <byte> numberToken = this.jsonTextBuffer.GetBufferedRawJsonToken(this.token.Start, this.token.End).Span;

                return(JsonTextParser.GetNumberValue(numberToken));
            }
 private NumberNode(ReadOnlyMemory <byte> bufferedToken)
     : base(JsonNodeType.Number)
 {
     this.value = new Lazy <Number64>(() => JsonTextParser.GetNumberValue(bufferedToken.Span));
 }
                /// <summary>
                /// Parses out a JSON AST node with a jsonTextReader.
                /// </summary>
                /// <param name="jsonTextReader">The reader to use as a lexer / tokenizer</param>
                /// <returns>JSON AST node (type determined by the reader)</returns>
                private static JsonTextNode ParseNode(IJsonReader jsonTextReader)
                {
                    JsonTextNode node;

                    switch (jsonTextReader.CurrentTokenType)
                    {
                    case JsonTokenType.BeginArray:
                        node = JsonTextParser.ParseArrayNode(jsonTextReader);
                        break;

                    case JsonTokenType.BeginObject:
                        node = JsonTextParser.ParseObjectNode(jsonTextReader);
                        break;

                    case JsonTokenType.String:
                        node = JsonTextParser.ParseStringNode(jsonTextReader);
                        break;

                    case JsonTokenType.Number:
                        node = JsonTextParser.ParseNumberNode(jsonTextReader);
                        break;

                    case JsonTokenType.Float32:
                    case JsonTokenType.Float64:
                        node = JsonTextParser.ParseFloatNode(jsonTextReader, jsonTextReader.CurrentTokenType);
                        break;

                    case JsonTokenType.Int8:
                    case JsonTokenType.Int16:
                    case JsonTokenType.Int32:
                    case JsonTokenType.Int64:
                    case JsonTokenType.UInt32:
                        node = JsonTextParser.ParseIntegerNode(jsonTextReader, jsonTextReader.CurrentTokenType);
                        break;

                    case JsonTokenType.True:
                        node = JsonTextParser.ParseTrueNode(jsonTextReader);
                        break;

                    case JsonTokenType.False:
                        node = JsonTextParser.ParseFalseNode(jsonTextReader);
                        break;

                    case JsonTokenType.Null:
                        node = JsonTextParser.ParseNullNode(jsonTextReader);
                        break;

                    case JsonTokenType.Guid:
                        node = JsonTextParser.ParseGuidNode(jsonTextReader);
                        break;

                    case JsonTokenType.Binary:
                        node = JsonTextParser.ParseBinaryNode(jsonTextReader);
                        break;

                    default:
                        throw new JsonInvalidTokenException();
                    }

                    return(node);
                }