public override IJsonReader CreateReader(IJsonNavigatorNode jsonNavigatorNode) { if (!(jsonNavigatorNode is JsonTextNavigatorNode jsonTextNavigatorNode)) { throw new ArgumentException($"{nameof(jsonNavigatorNode)} must be a {nameof(JsonTextNavigatorNode)}."); } ReadOnlyMemory <byte> buffer = jsonTextNavigatorNode switch { LazyNode lazyNode => lazyNode.BufferedValue, ArrayNode arrayNode => arrayNode.BufferedValue, FalseNode falseNode => SingletonBuffers.False, StringNodeBase stringNodeBase => stringNodeBase.BufferedValue.Memory, NullNode nullNode => SingletonBuffers.Null, NumberNode numberNode => numberNode.BufferedToken, ObjectNode objectNode => objectNode.BufferedValue, TrueNode trueNode => SingletonBuffers.True, GuidNode guidNode => guidNode.BufferedToken, BinaryNode binaryNode => binaryNode.BufferedToken, IntegerNode intNode => intNode.BufferedToken, FloatNode floatNode => floatNode.BufferedToken, _ => throw new ArgumentOutOfRangeException($"Unknown {nameof(JsonTextNavigatorNode)} type: {jsonTextNavigatorNode.GetType()}."), }; return(JsonReader.Create(JsonSerializationFormat.Text, buffer)); }
/// <summary> /// Parses out a JSON number AST node with a jsonTextReader. /// </summary> /// <param name="jsonTextReader">The reader to use as a lexer / tokenizer</param> /// <returns>JSON number AST node</returns> private static NumberNode ParseNumberNode(IJsonReader jsonTextReader) { NumberNode numberNode = NumberNode.Create(jsonTextReader.GetBufferedRawJsonToken()); // consume the number from the reader jsonTextReader.Read(); return(numberNode); }
/// <summary> /// Parses out a JSON number AST node with a jsonTextReader. /// </summary> /// <param name="jsonTextReader">The reader to use as a lexer / tokenizer</param> /// <returns>JSON number AST node</returns> private static NumberNode ParseNumberNode(IJsonReader jsonTextReader) { NumberNode numberNode = NumberNode.Create((ArraySegment<byte>)jsonTextReader.GetBufferedRawJsonToken()); // consume the number from the reader jsonTextReader.Read(); return numberNode; }
/// <summary> /// Parses out a JSON number AST node with a jsonTextReader. /// </summary> /// <param name="jsonTextReader">The reader to use as a lexer / tokenizer</param> /// <returns>JSON number AST node</returns> private static NumberNode ParseNumberNode(IJsonTextReaderPrivateImplementation jsonTextReader) { ReadOnlyMemory <byte> bufferedRawJsonToken = jsonTextReader.GetBufferedJsonToken().Memory; NumberNode numberNode = NumberNode.Create(bufferedRawJsonToken); // consume the number from the reader jsonTextReader.Read(); return(numberNode); }
/// <summary> /// Parses out a JSON number AST node with a jsonTextReader. /// </summary> /// <param name="jsonTextReader">The reader to use as a lexer / tokenizer</param> /// <returns>JSON number AST node</returns> private static NumberNode ParseNumberNode(IJsonReader jsonTextReader) { if (!jsonTextReader.TryGetBufferedRawJsonToken(out ReadOnlyMemory <byte> bufferedRawJsonToken)) { throw new InvalidOperationException("Failed to get the buffered raw json token."); } NumberNode numberNode = NumberNode.Create(bufferedRawJsonToken); // consume the number from the reader jsonTextReader.Read(); return(numberNode); }
/// <summary> /// Gets the numeric value for a node /// </summary> /// <param name="numberNavigatorNode">The <see cref="IJsonNavigatorNode"/> of the node you want the number value from.</param> /// <returns>A double that represents the number value in the node.</returns> public override double GetNumberValue(IJsonNavigatorNode numberNavigatorNode) { if (numberNavigatorNode == null) { throw new ArgumentNullException("numberNavigatorNode"); } NumberNode numberNode = numberNavigatorNode as NumberNode; if (numberNode == null) { throw new ArgumentException("numberNavigatorNode must actually be a number node."); } return numberNode.Value; }
private static ReadOnlyMemory <byte> GetNodeBuffer(JsonTextNavigatorNode jsonTextNavigatorNode) { return(jsonTextNavigatorNode switch { LazyNode lazyNode => lazyNode.BufferedValue, ArrayNode arrayNode => arrayNode.BufferedValue, FalseNode falseNode => SingletonBuffers.False, StringNodeBase stringNodeBase => stringNodeBase.BufferedValue.Memory, NullNode nullNode => SingletonBuffers.Null, NumberNode numberNode => numberNode.BufferedToken, ObjectNode objectNode => objectNode.BufferedValue, TrueNode trueNode => SingletonBuffers.True, GuidNode guidNode => guidNode.BufferedToken, BinaryNode binaryNode => binaryNode.BufferedToken, IntegerNode intNode => intNode.BufferedToken, FloatNode floatNode => floatNode.BufferedToken, _ => throw new ArgumentOutOfRangeException($"Unknown {nameof(JsonTextNavigatorNode)} type: {jsonTextNavigatorNode.GetType()}."), });