public bool TryGetBufferedStringValue(IJsonNavigatorNode stringNode, out IReadOnlyList <byte> bufferedStringValue) { bufferedStringValue = null; return(false); }
/// <inheritdoc /> public abstract double GetFloat64Value(IJsonNavigatorNode numberNode);
/// <inheritdoc /> public abstract Guid GetGuidValue(IJsonNavigatorNode guidNode);
/// <inheritdoc /> public abstract sbyte GetInt8Value(IJsonNavigatorNode numberNode);
/// <inheritdoc /> public abstract long GetInt64Value(IJsonNavigatorNode numberNode);
/// <inheritdoc /> public abstract JsonNodeType GetNodeType(IJsonNavigatorNode node);
/// <inheritdoc /> public abstract bool TryGetBufferedStringValue( IJsonNavigatorNode stringNode, out ReadOnlyMemory <byte> bufferedStringValue);
private DocumentFeedResponse <CosmosElement> GetFeedResponse( DocumentServiceRequest documentServiceRequest, DocumentServiceResponse documentServiceResponse) { // Execute the callback an each element of the page // For example just could get a response like this // { // "_rid": "qHVdAImeKAQ=", // "Documents": [{ // "id": "03230", // "_rid": "qHVdAImeKAQBAAAAAAAAAA==", // "_self": "dbs\/qHVdAA==\/colls\/qHVdAImeKAQ=\/docs\/qHVdAImeKAQBAAAAAAAAAA==\/", // "_etag": "\"410000b0-0000-0000-0000-597916b00000\"", // "_attachments": "attachments\/", // "_ts": 1501107886 // }], // "_count": 1 // } // And you should execute the callback on each document in "Documents". MemoryStream memoryStream = new MemoryStream(); documentServiceResponse.ResponseBody.CopyTo(memoryStream); long responseLengthBytes = memoryStream.Length; ReadOnlyMemory <byte> content; if (memoryStream.TryGetBuffer(out ArraySegment <byte> buffer)) { content = buffer; } else { content = memoryStream.ToArray(); } IJsonNavigator jsonNavigator = null; // Use the users custom navigator first. If it returns null back try the // internal navigator. if (this.feedOptions.CosmosSerializationFormatOptions != null) { jsonNavigator = this.feedOptions.CosmosSerializationFormatOptions.CreateCustomNavigatorCallback(content); if (jsonNavigator == null) { throw new InvalidOperationException("The CosmosSerializationOptions did not return a JSON navigator."); } } else { jsonNavigator = JsonNavigator.Create(content); } string resourceName = this.GetRootNodeName(documentServiceRequest.ResourceType); if (!jsonNavigator.TryGetObjectProperty( jsonNavigator.GetRootNode(), resourceName, out ObjectProperty objectProperty)) { throw new InvalidOperationException($"Response Body Contract was violated. QueryResponse did not have property: {resourceName}"); } IJsonNavigatorNode cosmosElements = objectProperty.ValueNode; if (!(CosmosElement.Dispatch( jsonNavigator, cosmosElements) is CosmosArray cosmosArray)) { throw new InvalidOperationException($"QueryResponse did not have an array of : {resourceName}"); } int itemCount = cosmosArray.Count; return(new DocumentFeedResponse <CosmosElement>( cosmosArray, itemCount, documentServiceResponse.Headers, documentServiceResponse.RequestStats, responseLengthBytes)); }
private static void PerformRoundTrip( SerializationFormat sourceFormat, SerializationFormat destinationFormat, string json, bool writeAsRootNode) { IJsonReader reader = sourceFormat switch { SerializationFormat.Text => JsonReader.Create(Encoding.UTF8.GetBytes(json)), SerializationFormat.Binary => JsonReader.Create(JsonTestUtils.ConvertTextToBinary(json)), SerializationFormat.NewtonsoftText => NewtonsoftToCosmosDBReader.CreateFromString(json), _ => throw new ArgumentException($"Unexpected {nameof(sourceFormat)} of type: {sourceFormat}"), }; IJsonNavigator navigator = sourceFormat switch { SerializationFormat.Text => JsonNavigator.Create(Encoding.UTF8.GetBytes(json)), SerializationFormat.Binary => JsonNavigator.Create(JsonTestUtils.ConvertTextToBinary(json)), SerializationFormat.NewtonsoftText => new JsonNewtonsoftNavigator(json), _ => throw new ArgumentException($"Unexpected {nameof(sourceFormat)} of type: {sourceFormat}"), }; foreach (object source in new object[] { reader, navigator }) { IJsonWriter writer = destinationFormat switch { SerializationFormat.Text => JsonWriter.Create(JsonSerializationFormat.Text), SerializationFormat.Binary => JsonWriter.Create(JsonSerializationFormat.Binary), SerializationFormat.NewtonsoftText => NewtonsoftToCosmosDBWriter.CreateTextWriter(), _ => throw new ArgumentException($"Unexpected {nameof(destinationFormat)} of type: {destinationFormat}"), }; switch (source) { case IJsonReader sourceReader: sourceReader.WriteAll(writer); break; case IJsonNavigator sourceNavigator: if (writeAsRootNode) { sourceNavigator.WriteNode(sourceNavigator.GetRootNode(), writer); } else { IJsonNavigatorNode rootNode = sourceNavigator.GetRootNode(); JsonNodeType jsonNodeType = sourceNavigator.GetNodeType(rootNode); switch (jsonNodeType) { case JsonNodeType.Array: writer.WriteArrayStart(); foreach (IJsonNavigatorNode arrayItem in sourceNavigator.GetArrayItems(rootNode)) { sourceNavigator.WriteNode(arrayItem, writer); } writer.WriteArrayEnd(); break; case JsonNodeType.Object: writer.WriteObjectStart(); foreach (ObjectProperty objectProperty in sourceNavigator.GetObjectProperties(rootNode)) { sourceNavigator.WriteNode(objectProperty.NameNode, writer); sourceNavigator.WriteNode(objectProperty.ValueNode, writer); } writer.WriteObjectEnd(); break; default: sourceNavigator.WriteNode(sourceNavigator.GetRootNode(), writer); break; } } break; default: Assert.Fail("Failed to downcast source type."); break; } string result = writer.SerializationFormat switch { JsonSerializationFormat.Text => Utf8String.UnsafeFromUtf8BytesNoValidation(writer.GetResult()).ToString(), JsonSerializationFormat.Binary => JsonTestUtils.ConvertBinaryToText(writer.GetResult()), _ => throw new ArgumentException(), }; string normalizedResult = JsonRoundTripsTests.NewtonsoftFormat(result); string normalizedJson = JsonRoundTripsTests.NewtonsoftFormat(json); Assert.AreEqual(normalizedJson, normalizedResult); } }
public static CosmosNumber64 Create( IJsonNavigator jsonNavigator, IJsonNavigatorNode jsonNavigatorNode) { return(new LazyCosmosNumber64(jsonNavigator, jsonNavigatorNode)); }
public static CosmosObject Create( IJsonNavigator jsonNavigator, IJsonNavigatorNode jsonNavigatorNode) { return(new LazyCosmosObject(jsonNavigator, jsonNavigatorNode)); }
public int GetArrayItemCount(IJsonNavigatorNode arrayNode) { JArray jArray = ((NewtonsoftNode)arrayNode).JToken as JArray; return(jArray.Count); }
public IJsonNavigatorNode GetArrayItemAt(IJsonNavigatorNode arrayNode, int index) { JArray jArray = ((NewtonsoftNode)arrayNode).JToken as JArray; return(new NewtonsoftNode(jArray[index], this.JTokenToJsonNodeType(jArray[index]))); }
public bool TryGetBufferedRawJson(IJsonNavigatorNode jsonNode, out IReadOnlyList <byte> bufferedRawJson) { bufferedRawJson = null; return(false); }
/// <inheritdoc /> public abstract IEnumerable <ObjectProperty> GetObjectProperties(IJsonNavigatorNode objectNode);
/// <inheritdoc /> public abstract ReadOnlyMemory <byte> GetBinaryValue(IJsonNavigatorNode binaryNode);
/// <inheritdoc /> public abstract bool TryGetBufferedRawJson( IJsonNavigatorNode jsonNode, out ReadOnlyMemory <byte> bufferedRawJson);
/// <inheritdoc /> public abstract bool TryGetBufferedBinaryValue( IJsonNavigatorNode binaryNode, out ReadOnlyMemory <byte> bufferedBinaryValue);
/// <inheritdoc /> public abstract Number64 GetNumberValue(IJsonNavigatorNode numberNode);
/// <inheritdoc /> public abstract int GetArrayItemCount(IJsonNavigatorNode arrayNode);
/// <inheritdoc /> public abstract string GetStringValue(IJsonNavigatorNode stringNode);
/// <inheritdoc /> public abstract IJsonNavigatorNode GetArrayItemAt(IJsonNavigatorNode arrayNode, int index);
/// <inheritdoc /> public abstract short GetInt16Value(IJsonNavigatorNode numberNode);
/// <inheritdoc /> public abstract IEnumerable <IJsonNavigatorNode> GetArrayItems(IJsonNavigatorNode arrayNode);
/// <inheritdoc /> public abstract float GetFloat32Value(IJsonNavigatorNode numberNode);
/// <inheritdoc /> public abstract int GetObjectPropertyCount(IJsonNavigatorNode objectNode);
/// <inheritdoc /> public abstract uint GetUInt32Value(IJsonNavigatorNode numberNode);
/// <inheritdoc /> public abstract bool TryGetObjectProperty( IJsonNavigatorNode objectNode, string propertyName, out ObjectProperty objectProperty);
public static CosmosInt32 Create( IJsonNavigator jsonNavigator, IJsonNavigatorNode jsonNavigatorNode) { return(new LazyCosmosInt32(jsonNavigator, jsonNavigatorNode)); }
public string GetStringValue(IJsonNavigatorNode stringNode) { return((string)((NewtonsoftNode)stringNode).JToken); }