Beispiel #1
0
        public void ReaderToWriter(
            CurratedDocsPayload payload,
            SerializationFormat sourceFormat,
            SerializationFormat destinationFormat)
        {
            IJsonReader reader = sourceFormat switch
            {
                SerializationFormat.Text => JsonReader.Create(payload.Text),
                SerializationFormat.Binary => JsonReader.Create(payload.Binary),
                SerializationFormat.BinaryWithDictionaryEncoding => JsonReader.Create(
                    payload.BinaryWithDictionaryEncoding.binary,
                    payload.BinaryWithDictionaryEncoding.dictionary),
                SerializationFormat.NewtonsoftText => NewtonsoftToCosmosDBReader.CreateFromBuffer(payload.Text),
                _ => throw new ArgumentException($"Unexpected {nameof(sourceFormat)} of type: '{sourceFormat}'"),
            };

            IJsonWriter writer = destinationFormat switch
            {
                SerializationFormat.Text => JsonWriter.Create(JsonSerializationFormat.Text),
                SerializationFormat.Binary => JsonWriter.Create(JsonSerializationFormat.Binary),
                SerializationFormat.BinaryWithDictionaryEncoding => JsonWriter.Create(
                    JsonSerializationFormat.Binary,
                    new JsonStringDictionary(capacity: 128)),
                SerializationFormat.NewtonsoftText => NewtonsoftToCosmosDBWriter.CreateTextWriter(),
                _ => throw new ArgumentException($"Unexpected {nameof(destinationFormat)} of type: {destinationFormat}"),
            };

            writer.WriteAll(reader);
        }
Beispiel #2
0
        public static string ConvertBinaryToText(byte[] binary)
        {
            IJsonReader binaryReader = JsonReader.Create(binary);
            IJsonWriter textWriter   = JsonWriter.Create(JsonSerializationFormat.Text);

            textWriter.WriteAll(binaryReader);
            return(Encoding.UTF8.GetString(textWriter.GetResult().ToArray()));
        }
Beispiel #3
0
        public static ReadOnlyMemory <byte> ConvertTextToBinary(string text)
        {
            IJsonWriter binaryWriter = JsonWriter.Create(JsonSerializationFormat.Binary);
            IJsonReader textReader   = JsonReader.Create(Encoding.UTF8.GetBytes(text));

            binaryWriter.WriteAll(textReader);
            return(binaryWriter.GetResult());
        }
        public static byte[] ConvertTextToBinary(string text, JsonStringDictionary jsonStringDictionary = null)
        {
            IJsonWriter binaryWriter = JsonWriter.Create(JsonSerializationFormat.Binary, jsonStringDictionary);
            IJsonReader textReader   = JsonReader.Create(Encoding.UTF8.GetBytes(text));

            binaryWriter.WriteAll(textReader);
            return(binaryWriter.GetResult().ToArray());
        }
        public static string ConvertBinaryToText(ReadOnlyMemory <byte> binary, JsonStringDictionary jsonStringDictionary = null)
        {
            IJsonReader binaryReader = JsonReader.Create(binary, jsonStringDictionary);
            IJsonWriter textWriter   = JsonWriter.Create(JsonSerializationFormat.Text);

            textWriter.WriteAll(binaryReader);
            return(Encoding.UTF8.GetString(textWriter.GetResult().ToArray()));
        }
        private string FormatJson(string json)
        {
            // Feed the json through our reader and writer once to remove and formatting and escaping differences
            IJsonReader jsonReaderFormatter = JsonReader.Create(Encoding.UTF8.GetBytes(json));
            IJsonWriter jsonWriterFormatter = JsonWriter.Create(JsonSerializationFormat.Text);

            jsonWriterFormatter.WriteAll(jsonReaderFormatter);
            string formattedJson = Encoding.UTF8.GetString(jsonWriterFormatter.GetResult());

            return(formattedJson);
        }
        private void TextRoundTrip(string input)
        {
            string formattedJson = this.FormatJson(input);

            IJsonReader jsonReader = JsonReader.Create(Encoding.UTF8.GetBytes(formattedJson));
            IJsonWriter jsonWriter = JsonWriter.Create(JsonSerializationFormat.Text);

            jsonWriter.WriteAll(jsonReader);
            string jsonFromWriter = Encoding.UTF8.GetString(jsonWriter.GetResult());

            Assert.AreEqual(formattedJson, jsonFromWriter);
        }
        /// <summary>
        /// Reads all the tokens from the input string using a JsonReader and writes them to a JsonReader and sees if we get back the same result.
        /// </summary>
        /// <param name="input">The input to read from.</param>
        private void TestReaderToWriter(string input)
        {
            IJsonReader jsonReader = JsonReader.Create(Encoding.UTF8.GetBytes(input));
            IJsonWriter jsonWriter = JsonWriter.Create(JsonSerializationFormat.Text);

            jsonWriter.WriteAll(jsonReader);
            string output = Encoding.UTF8.GetString(jsonWriter.GetResult());

            string inputNoWhitespace  = Regex.Replace(input, @"\s+", "");
            string outputNoWhitespace = Regex.Replace(output, @"\s+", "");

            Assert.AreEqual(inputNoWhitespace, outputNoWhitespace);
        }
Beispiel #9
0
        public async Task ItemQueryStreamSerializationSetting()
        {
            IList <ToDoActivity> deleteList = await this.CreateRandomItems(101, randomPartitionKey : true);

            CosmosSqlQueryDefinition   sql     = new CosmosSqlQueryDefinition("SELECT * FROM toDoActivity t ORDER BY t.taskNum");
            CosmosSerializationOptions options = new CosmosSerializationOptions(
                ContentSerializationFormat.CosmosBinary.ToString(),
                (content) => JsonNavigator.Create(content),
                () => JsonWriter.Create(JsonSerializationFormat.Binary));

            CosmosQueryRequestOptions requestOptions = new CosmosQueryRequestOptions()
            {
                CosmosSerializationOptions = options
            };

            List <ToDoActivity> resultList      = new List <ToDoActivity>();
            double totalRequstCharge            = 0;
            CosmosResultSetIterator setIterator =
                this.Container.Items.CreateItemQueryAsStream(sql, maxConcurrency: 5, maxItemCount: 5, requestOptions: requestOptions);

            while (setIterator.HasMoreResults)
            {
                using (CosmosQueryResponse iter = await setIterator.FetchNextSetAsync())
                {
                    Assert.IsTrue(iter.IsSuccess);
                    Assert.IsNull(iter.ErrorMessage);
                    Assert.IsTrue(iter.Count <= 5);
                    totalRequstCharge += iter.RequestCharge;
                    IJsonReader reader     = JsonReader.Create(iter.Content);
                    IJsonWriter textWriter = JsonWriter.Create(JsonSerializationFormat.Text);
                    textWriter.WriteAll(reader);
                    string json = Encoding.UTF8.GetString(textWriter.GetResult());
                    Assert.IsNotNull(json);
                    ToDoActivity[] responseActivities = JsonConvert.DeserializeObject <ToDoActivity[]>(json);
                    resultList.AddRange(responseActivities);
                }
            }

            Assert.AreEqual(deleteList.Count, resultList.Count);
            Assert.IsTrue(totalRequstCharge > 0);

            List <ToDoActivity> verifiedOrderBy = deleteList.OrderBy(x => x.taskNum).ToList();

            for (int i = 0; i < verifiedOrderBy.Count(); i++)
            {
                Assert.AreEqual(verifiedOrderBy[i].taskNum, resultList[i].taskNum);
                Assert.AreEqual(verifiedOrderBy[i].id, resultList[i].id);
            }
        }
Beispiel #10
0
        public async Task DecryptQueryBinaryResponse()
        {
            TestDoc testDoc = await EncryptionTests.CreateItemAsync(EncryptionTests.containerCore, EncryptionTests.dekId, TestDoc.PathsToEncrypt);

            CosmosSerializationFormatOptions options = new CosmosSerializationFormatOptions(
                Documents.ContentSerializationFormat.CosmosBinary.ToString(),
                (content) => JsonNavigator.Create(content),
                () => JsonWriter.Create(JsonSerializationFormat.Binary));

            QueryRequestOptions requestOptions = new QueryRequestOptions()
            {
                CosmosSerializationFormatOptions = options
            };

            TestDoc expectedDoc = new TestDoc(testDoc);

            string query = "SELECT * FROM c";

            FeedIterator feedIterator = EncryptionTests.containerCore.GetItemQueryStreamIterator(
                query,
                requestOptions: requestOptions);

            while (feedIterator.HasMoreResults)
            {
                ResponseMessage response = await feedIterator.ReadNextAsync();

                Assert.IsTrue(response.IsSuccessStatusCode);
                Assert.IsNull(response.ErrorMessage);

                // Copy the stream and check that the first byte is the correct value
                MemoryStream memoryStream = new MemoryStream();
                response.Content.CopyTo(memoryStream);
                byte[] content = memoryStream.ToArray();
                response.Content.Position = 0;

                // Examine the first buffer byte to determine the serialization format
                byte firstByte = content[0];
                Assert.AreEqual(128, firstByte);
                Assert.AreEqual(JsonSerializationFormat.Binary, (JsonSerializationFormat)firstByte);

                IJsonReader reader     = JsonReader.Create(content);
                IJsonWriter textWriter = JsonWriter.Create(JsonSerializationFormat.Text);
                textWriter.WriteAll(reader);
                string json = Encoding.UTF8.GetString(textWriter.GetResult().ToArray());
                Assert.IsNotNull(json);
                Assert.IsTrue(json.Contains(testDoc.Sensitive));
            }
        }
        private static void ExecuteReaderBenchmark(
            CurratedDocsPayload payload,
            SerializationFormat sourceFormat,
            SerializationFormat destinationFormat)
        {
            IJsonReader reader = sourceFormat switch
            {
                SerializationFormat.Text => JsonReader.Create(payload.Text),
                SerializationFormat.Binary => JsonReader.Create(payload.Binary),
                SerializationFormat.NewtonsoftText => NewtonsoftToCosmosDBReader.CreateFromBuffer(payload.Text),
                _ => throw new ArgumentException($"Unexpected {nameof(sourceFormat)} of type: '{sourceFormat}'"),
            };

            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}"),
            };

            writer.WriteAll(reader);
        }
        private static ReadOnlyMemory <byte> GetPayload(string filename)
        {
            string path = string.Format("TestJsons/{0}", filename);
            string json = TextFileConcatenation.ReadMultipartFile(path);

            IEnumerable <object> documents = null;

            try
            {
                try
                {
                    documents = JsonConvert.DeserializeObject <List <object> >(json);
                }
                catch (JsonSerializationException)
                {
                    documents = new List <object>
                    {
                        JsonConvert.DeserializeObject <object>(json)
                    };
                }
            }
            catch (Exception ex)
            {
                Assert.Fail($"Failed to get JSON payload: {json.Substring(0, 128)} {ex}");
            }

            documents = documents.OrderBy(x => Guid.NewGuid()).Take(100);

            json = JsonConvert.SerializeObject(documents);

            IJsonReader jsonReader = Microsoft.Azure.Cosmos.Json.JsonReader.Create(Encoding.UTF8.GetBytes(json));
            IJsonWriter jsonWriter = Microsoft.Azure.Cosmos.Json.JsonWriter.Create(JsonSerializationFormat.Binary);

            jsonWriter.WriteAll(jsonReader);
            return(jsonWriter.GetResult());
        }