public override IJsonReader CreateReader(IJsonNavigatorNode jsonNavigatorNode) { if (!(jsonNavigatorNode is JsonTextNavigatorNode jsonTextNavigatorNode)) { throw new ArgumentException($"{nameof(jsonNavigatorNode)} must be a {nameof(JsonTextNavigatorNode)}."); } ReadOnlyMemory <byte> buffer = JsonTextNavigator.GetNodeBuffer(jsonTextNavigatorNode); return(JsonReader.Create(JsonSerializationFormat.Text, buffer)); }
public override void WriteNode(IJsonNavigatorNode jsonNavigatorNode, IJsonWriter jsonWriter) { if (!(jsonNavigatorNode is JsonTextNavigatorNode textNavigatorNode)) { throw new ArgumentOutOfRangeException($"Expected {nameof(jsonNavigatorNode)} to be a {nameof(JsonTextNavigatorNode)}."); } bool sameEncoding = this.SerializationFormat == jsonWriter.SerializationFormat; if (sameEncoding && jsonWriter is IJsonTextWriterExtensions jsonTextWriter) { bool isFieldName = textNavigatorNode.Type == JsonNodeType.FieldName; jsonTextWriter.WriteRawJsonValue( JsonTextNavigator.GetNodeBuffer(textNavigatorNode), isFieldName); } else { // TODO: we can optimize this to use private APIs in the future, but for now defaulting to public API. base.WriteNode(jsonNavigatorNode, jsonWriter); } }