private static FloatNode ParseFloatNode(IJsonReader jsonTextReader, JsonTokenType jsonTokenType) { ReadOnlyMemory <byte> bytes = jsonTextReader.GetBufferedRawJsonToken(); FloatNode floatNode; switch (jsonTokenType) { case JsonTokenType.Float32: floatNode = Float32Node.Create(bytes); break; case JsonTokenType.Float64: floatNode = Float64Node.Create(bytes); break; default: throw new ArgumentException($"Unknown {nameof(JsonTokenType)}: {jsonTokenType}"); } // consume the float from the reader jsonTextReader.Read(); return(floatNode); }
private static BinaryNode ParseBinaryNode(IJsonReader jsonTextReader) { BinaryNode node = BinaryNode.Create(jsonTextReader.GetBufferedRawJsonToken()); // advance the reader forward. jsonTextReader.Read(); return(node); }
/// <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 string AST node with a jsonTextReader. /// </summary> /// <param name="jsonTextReader">The reader to use as a lexer / tokenizer</param> /// <returns>JSON string AST node</returns> private static StringNode ParseStringNode(IJsonReader jsonTextReader) { StringNode stringNode = StringNode.Create(jsonTextReader.GetBufferedRawJsonToken()); // consume the string from the reader jsonTextReader.Read(); return(stringNode); }
/// <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 string AST node with a jsonTextReader. /// </summary> /// <param name="jsonTextReader">The reader to use as a lexer / tokenizer</param> /// <returns>JSON string AST node</returns> private static StringNode ParseStringNode(IJsonReader jsonTextReader) { StringNode stringNode = StringNode.Create((ArraySegment<byte>)jsonTextReader.GetBufferedRawJsonToken()); // consume the string from the reader jsonTextReader.Read(); return stringNode; }
/// <summary> /// Parses out a JSON property AST node with a jsonTextReader. /// </summary> /// <param name="jsonTextReader">The reader to use as a lexer / tokenizer</param> /// <returns>JSON property AST node</returns> private static ObjectProperty ParsePropertyNode(IJsonReader jsonTextReader) { FieldNameNode fieldName = FieldNameNode.Create(jsonTextReader.GetBufferedRawJsonToken()); // Consume the fieldname from the jsonreader jsonTextReader.Read(); JsonTextNode value = Parser.ParseNode(jsonTextReader); return(new ObjectProperty(fieldName, value)); }
private static IntegerNode ParseIntegerNode(IJsonReader jsonTextReader, JsonTokenType jsonTokenType) { ReadOnlyMemory <byte> bytes = jsonTextReader.GetBufferedRawJsonToken(); IntegerNode integerNode; switch (jsonTokenType) { case JsonTokenType.Int8: integerNode = Int8Node.Create(bytes); break; case JsonTokenType.Int16: integerNode = Int16Node.Create(bytes); break; case JsonTokenType.Int32: integerNode = Int32Node.Create(bytes); break; case JsonTokenType.Int64: integerNode = Int64Node.Create(bytes); break; case JsonTokenType.UInt32: integerNode = UInt32Node.Create(bytes); break; default: throw new ArgumentException($"Unknown {nameof(JsonTokenType)}: {jsonTokenType}"); } // consume the integer from the reader jsonTextReader.Read(); return(integerNode); }
/// <summary> /// Writes current token from a json reader to the internal buffer. /// </summary> /// <param name="jsonReader">The JsonReader to the get the current token from.</param> public void WriteCurrentToken(IJsonReader jsonReader) { if (jsonReader == null) { throw new ArgumentNullException("jsonReader can not be null"); } // For now we don't optimize for text, since the reader could be UTF-8 and the writer could be UTF-16. // We need to add more enums for the different serialization formats. bool sameFormat = jsonReader.SerializationFormat == this.SerializationFormat && (this.SerializationFormat == JsonSerializationFormat.Binary || this.SerializationFormat == JsonSerializationFormat.HybridRow); JsonTokenType jsonTokenType = jsonReader.CurrentTokenType; switch (jsonTokenType) { case JsonTokenType.NotStarted: break; case JsonTokenType.BeginArray: this.WriteArrayStart(); break; case JsonTokenType.EndArray: this.WriteArrayEnd(); break; case JsonTokenType.BeginObject: this.WriteObjectStart(); break; case JsonTokenType.EndObject: this.WriteObjectEnd(); break; case JsonTokenType.True: this.WriteBoolValue(true); break; case JsonTokenType.False: this.WriteBoolValue(false); break; case JsonTokenType.Null: this.WriteNullValue(); break; case JsonTokenType.String: case JsonTokenType.Number: case JsonTokenType.FieldName: { if (sameFormat) { IReadOnlyList <byte> bufferedRawJson = jsonReader.GetBufferedRawJsonToken(); this.WriteRawJsonToken(jsonTokenType, bufferedRawJson); } else { if (jsonTokenType == JsonTokenType.Number) { double number = jsonReader.GetNumberValue(); this.WriteNumberValue(number); } else { string value = jsonReader.GetStringValue(); if (jsonTokenType == JsonTokenType.FieldName) { this.WriteFieldName(value); } else { this.WriteStringValue(value); } } } break; } default: throw new ArgumentException($"Unexpected JsonTokenType: {jsonTokenType}"); } }
private static BinaryNode ParseBinaryNode(IJsonReader jsonTextReader) { return(BinaryNode.Create(jsonTextReader.GetBufferedRawJsonToken())); }
private static GuidNode ParseGuidNode(IJsonReader jsonTextReader) { return(GuidNode.Create(jsonTextReader.GetBufferedRawJsonToken())); }
/// <summary> /// Writes current token from a json reader to the internal buffer. /// </summary> /// <param name="jsonReader">The JsonReader to the get the current token from.</param> public void WriteCurrentToken(IJsonReader jsonReader) { if (jsonReader == null) { throw new ArgumentNullException("jsonReader can not be null"); } // For now we don't optimize for text, since the reader could be UTF-8 and the writer could be UTF-16. // We need to add more enums for the different serialization formats. bool sameFormat = jsonReader.SerializationFormat == this.SerializationFormat && (this.SerializationFormat == JsonSerializationFormat.Binary || this.SerializationFormat == JsonSerializationFormat.HybridRow); JsonTokenType jsonTokenType = jsonReader.CurrentTokenType; switch (jsonTokenType) { case JsonTokenType.NotStarted: break; case JsonTokenType.BeginArray: this.WriteArrayStart(); break; case JsonTokenType.EndArray: this.WriteArrayEnd(); break; case JsonTokenType.BeginObject: this.WriteObjectStart(); break; case JsonTokenType.EndObject: this.WriteObjectEnd(); break; case JsonTokenType.True: this.WriteBoolValue(true); break; case JsonTokenType.False: this.WriteBoolValue(false); break; case JsonTokenType.Null: this.WriteNullValue(); break; default: { if (sameFormat) { ReadOnlySpan <byte> bufferedRawJson = jsonReader.GetBufferedRawJsonToken().Span; this.WriteRawJsonToken(jsonTokenType, bufferedRawJson); } else { switch (jsonTokenType) { case JsonTokenType.String: case JsonTokenType.FieldName: { string value = jsonReader.GetStringValue(); if (jsonTokenType == JsonTokenType.FieldName) { this.WriteFieldName(value); } else { this.WriteStringValue(value); } break; } case JsonTokenType.Number: { Number64 value = jsonReader.GetNumberValue(); this.WriteNumberValue(value); } break; case JsonTokenType.Int8: { sbyte value = jsonReader.GetInt8Value(); this.WriteInt8Value(value); } break; case JsonTokenType.Int16: { short value = jsonReader.GetInt16Value(); this.WriteInt16Value(value); } break; case JsonTokenType.Int32: { int value = jsonReader.GetInt32Value(); this.WriteInt32Value(value); } break; case JsonTokenType.Int64: { long value = jsonReader.GetInt64Value(); this.WriteInt64Value(value); } break; case JsonTokenType.UInt32: { uint value = jsonReader.GetUInt32Value(); this.WriteUInt32Value(value); } break; case JsonTokenType.Float32: { float value = jsonReader.GetFloat32Value(); this.WriteFloat32Value(value); } break; case JsonTokenType.Float64: { double value = jsonReader.GetFloat64Value(); this.WriteFloat64Value(value); } break; case JsonTokenType.Guid: { Guid value = jsonReader.GetGuidValue(); this.WriteGuidValue(value); } break; case JsonTokenType.Binary: { ReadOnlyMemory <byte> value = jsonReader.GetBinaryValue(); this.WriteBinaryValue(value.Span); } break; default: throw new ArgumentException($"Unexpected JsonTokenType: {jsonTokenType}"); } } } break; } }
/// <summary> /// Writes current token from a json reader to the internal buffer. /// </summary> /// <param name="jsonReader">The JsonReader to the get the current token from.</param> public void WriteCurrentToken(IJsonReader jsonReader) { if (jsonReader == null) { throw new ArgumentNullException("jsonReader can not be null"); } // For now short circuit this to false until we figure out how to optimize this. bool sameFormat = jsonReader.SerializationFormat == this.SerializationFormat && false; JsonTokenType jsonTokenType = jsonReader.CurrentTokenType; switch (jsonTokenType) { case JsonTokenType.NotStarted: break; case JsonTokenType.BeginArray: this.WriteArrayStart(); break; case JsonTokenType.EndArray: this.WriteArrayEnd(); break; case JsonTokenType.BeginObject: this.WriteObjectStart(); break; case JsonTokenType.EndObject: this.WriteObjectEnd(); break; case JsonTokenType.True: this.WriteBoolValue(true); break; case JsonTokenType.False: this.WriteBoolValue(false); break; case JsonTokenType.Null: this.WriteNullValue(); break; case JsonTokenType.String: case JsonTokenType.Number: case JsonTokenType.FieldName: { if (sameFormat) { IReadOnlyList <byte> bufferedRawJson = jsonReader.GetBufferedRawJsonToken(); this.WriteRawJsonToken(jsonTokenType, bufferedRawJson); } else { if (jsonTokenType == JsonTokenType.Number) { double number = jsonReader.GetNumberValue(); this.WriteNumberValue(number); } else { string value = jsonReader.GetStringValue(); if (jsonTokenType == JsonTokenType.FieldName) { this.WriteFieldName(value); } else { this.WriteStringValue(value); } } } break; } default: throw new ArgumentException($"Unexpected JsonTokenType: {jsonTokenType}"); } }