Exemplo n.º 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 = JsonTextNavigator.GetNodeBuffer(jsonTextNavigatorNode);

                return(JsonReader.Create(JsonSerializationFormat.Text, buffer));
            }
Exemplo n.º 2
0
            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);
                }
            }