public ChangeFeedCrossFeedRangeAsyncEnumerator( CrossPartitionChangeFeedAsyncEnumerator enumerator, JsonSerializationFormatOptions jsonSerializationFormatOptions) { this.enumerator = enumerator ?? throw new ArgumentNullException(nameof(enumerator)); this.jsonSerializationFormatOptions = jsonSerializationFormatOptions; }
public static CosmosArray ParseRestFeedResponse( Stream stream, ResourceType resourceType, JsonSerializationFormatOptions jsonSerializationFormatOptions) { // Parse out the document from the REST 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 // } // You want to create a CosmosElement for each document in "Documents". ReadOnlyMemory <byte> content = StreamToBytes(stream); IJsonNavigator jsonNavigator = CreateNavigatorFromContent(content, jsonSerializationFormatOptions); string arrayKeyName = ResourceTypeToArrayKeyName(resourceType); return(GetResourceArrayFromNavigator(jsonNavigator, arrayKeyName)); }
public ChangeFeedCrossFeedRangeAsyncEnumerable( IDocumentContainer documentContainer, ChangeFeedCrossFeedRangeState state, ChangeFeedPaginationOptions changeFeedPaginationOptions, JsonSerializationFormatOptions jsonSerializationFormatOptions = null) { this.documentContainer = documentContainer ?? throw new ArgumentNullException(nameof(documentContainer)); this.changeFeedPaginationOptions = changeFeedPaginationOptions ?? ChangeFeedPaginationOptions.Default; this.state = state; this.jsonSerializationFormatOptions = jsonSerializationFormatOptions; }
public async Task TestContentSerializationOptions() { { // Native format IAsyncEnumerable <TryCatch <ChangeFeedPage> > asyncEnumerable = this.Container.GetChangeFeedAsyncEnumerable( ChangeFeedCrossFeedRangeState.CreateFromBeginning(), ChangeFeedMode.Incremental, new ChangeFeedRequestOptions() { JsonSerializationFormatOptions = JsonSerializationFormatOptions.Create(JsonSerializationFormat.Binary) }); await foreach (TryCatch <ChangeFeedPage> monadicPage in asyncEnumerable) { monadicPage.ThrowIfFailed(); if (monadicPage.Result.NotModified) { break; } } } { // Custom format IAsyncEnumerable <TryCatch <ChangeFeedPage> > asyncEnumerable = this.Container.GetChangeFeedAsyncEnumerable( ChangeFeedCrossFeedRangeState.CreateFromBeginning(), ChangeFeedMode.Incremental, new ChangeFeedRequestOptions() { JsonSerializationFormatOptions = JsonSerializationFormatOptions.Create( JsonSerializationFormat.Binary, (content) => JsonNavigator.Create(content)) }); await foreach (TryCatch <ChangeFeedPage> monadicPage in asyncEnumerable) { monadicPage.ThrowIfFailed(); if (monadicPage.Result.NotModified) { break; } } } }
private static IJsonNavigator CreateNavigatorFromContent(ReadOnlyMemory <byte> content, JsonSerializationFormatOptions jsonSerializationFormatOptions) { IJsonNavigator jsonNavigator; if (jsonSerializationFormatOptions != null) { if (jsonSerializationFormatOptions is JsonSerializationFormatOptions.CustomJsonSerializationFormatOptions customOptions) { jsonNavigator = customOptions.createNavigator(content); if (jsonNavigator == null) { throw new InvalidOperationException("The CosmosSerializationOptions did not return a JSON navigator."); } } else if (jsonSerializationFormatOptions is JsonSerializationFormatOptions.NativelySupportedJsonSerializationFormatOptions) { jsonNavigator = JsonNavigator.Create(content); } else { throw new ArgumentOutOfRangeException($"Unknown {nameof(JsonSerializationFormatOptions)} type: {jsonSerializationFormatOptions.GetType()}"); } } else { jsonNavigator = JsonNavigator.Create(content); } return(jsonNavigator); }
public static CosmosArray ParseRestFeedResponse( Stream stream, JsonSerializationFormatOptions jsonSerializationFormatOptions) { return(ParseRestFeedResponse(stream, ResourceType.Document, jsonSerializationFormatOptions)); }