Пример #1
0
            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;
                }
Пример #4
0
                /// <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);
                }
Пример #5
0
                /// <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;
            }
Пример #7
0
 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()}."),
     });