Пример #1
0
        public override Task <InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context)
        {
            try
            {
#if (NETCOREAPP2_1 || NETCOREAPP2_2)
                ValueTask <object> task = Cbor.DeserializeAsync(context.ModelType, context.HttpContext.Request.Body, _cborOptions);
#else
                ValueTask <object> task = Cbor.DeserializeAsync(context.ModelType, context.HttpContext.Request.BodyReader, _cborOptions);
#endif
                if (task.IsCompleted)
                {
                    return(InputFormatterResult.SuccessAsync(task.Result));
                }

                return(FinishReadRequestBodyAsync(task));
            }
            catch (Exception ex)
            {
                context.ModelState.AddModelError("CBOR", ex.Message);
                return(failureTask);
            }

            async Task <InputFormatterResult> FinishReadRequestBodyAsync(ValueTask <object> localTask)
            {
                object result = await localTask.ConfigureAwait(false);

                return(InputFormatterResult.Success(result));
            }
        }
        public async Task DeserializeFromMemoryStream()
        {
            MemoryStream stream = new MemoryStream(SimpleObjectHexBuffer.HexToBytes());
            SimpleObject obj    = await Cbor.DeserializeAsync <SimpleObject>(stream);

            TestSimpleObject(obj);
        }
        public async Task DeserializeObjectFromMemoryStream()
        {
            MemoryStream stream = new MemoryStream(SimpleObjectHexBuffer.HexToBytes());
            SimpleObject obj    = (SimpleObject)await Cbor.DeserializeAsync(typeof(SimpleObject), stream);

            TestSimpleObject(obj);
        }
        public async Task DeserializeObjectFromPipeReader(int bufferSize)
        {
            ReadOnlyMemory <byte> cborBytes = SimpleObjectHexBuffer.HexToBytes();

            Pipe pipe = new Pipe();

            async Task WriteAsync(int sliceSize)
            {
                Memory <byte> buffer = pipe.Writer.GetMemory(cborBytes.Length);

                while (cborBytes.Length > 0)
                {
                    sliceSize = Math.Min(sliceSize, cborBytes.Length);
                    cborBytes.Slice(0, sliceSize).CopyTo(buffer.Slice(0, sliceSize));
                    cborBytes = cborBytes.Slice(sliceSize);
                    buffer    = buffer.Slice(sliceSize);
                    pipe.Writer.Advance(sliceSize);
                    await pipe.Writer.FlushAsync();

                    await Task.Delay(1);
                }

                pipe.Writer.Complete();
            }

            Task <object> readTask = Cbor.DeserializeAsync(typeof(SimpleObject), pipe.Reader).AsTask();

            await Task.WhenAll(WriteAsync(bufferSize), readTask);

            SimpleObject obj = (SimpleObject)readTask.Result;

            TestSimpleObject(obj);
        }
        public async Task DeserializeObjectFromFileStream()
        {
            string tempFileName = Path.GetTempFileName();

            File.WriteAllBytes(tempFileName, SimpleObjectHexBuffer.HexToBytes());

            try
            {
                using (FileStream stream = File.OpenRead(tempFileName))
                {
                    SimpleObject obj = (SimpleObject)await Cbor.DeserializeAsync(typeof(SimpleObject), stream);

                    TestSimpleObject(obj);
                }
            }
            finally
            {
                File.Delete(tempFileName);
            }
        }