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)); }
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()}."), });
private static IntegerNode ParseIntegerNode( IJsonTextReaderPrivateImplementation jsonTextReader, JsonTokenType jsonTokenType) { ReadOnlyMemory <byte> bufferedRawJsonToken = jsonTextReader.GetBufferedJsonToken().Memory; IntegerNode integerNode = jsonTokenType switch { JsonTokenType.Int8 => Int8Node.Create(bufferedRawJsonToken), JsonTokenType.Int16 => Int16Node.Create(bufferedRawJsonToken), JsonTokenType.Int32 => Int32Node.Create(bufferedRawJsonToken), JsonTokenType.Int64 => Int64Node.Create(bufferedRawJsonToken), JsonTokenType.UInt32 => UInt32Node.Create(bufferedRawJsonToken), _ => throw new ArgumentException($"Unknown {nameof(JsonTokenType)}: {jsonTokenType}"), }; // consume the integer from the reader jsonTextReader.Read(); return(integerNode); }