Пример #1
0
 public ChangeFeedCrossFeedRangeAsyncEnumerator(
     CrossPartitionChangeFeedAsyncEnumerator enumerator,
     JsonSerializationFormatOptions jsonSerializationFormatOptions)
 {
     this.enumerator = enumerator ?? throw new ArgumentNullException(nameof(enumerator));
     this.jsonSerializationFormatOptions = jsonSerializationFormatOptions;
 }
Пример #2
0
        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;
                    }
                }
            }
        }
Пример #5
0
        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);
        }
Пример #6
0
 public static CosmosArray ParseRestFeedResponse(
     Stream stream,
     JsonSerializationFormatOptions jsonSerializationFormatOptions)
 {
     return(ParseRestFeedResponse(stream, ResourceType.Document, jsonSerializationFormatOptions));
 }