Esempio n. 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 DeserializeObjectFromMemoryStream()
        {
            MemoryStream stream = new MemoryStream(SimpleObjectHexBuffer.HexToBytes());
            SimpleObject obj    = (SimpleObject)await Cbor.DeserializeAsync(typeof(SimpleObject), stream);

            TestSimpleObject(obj);
        }
        public void DeserializeFromSpan()
        {
            Span <byte>  buffer = SimpleObjectHexBuffer.HexToBytes();
            SimpleObject obj    = Cbor.Deserialize <SimpleObject>(buffer);

            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 void DeserializeObjectFromSpan()
        {
            Span <byte>  buffer = SimpleObjectHexBuffer.HexToBytes();
            SimpleObject obj    = (SimpleObject)Cbor.Deserialize(typeof(SimpleObject), buffer);

            TestSimpleObject(obj);
        }
        public async Task SerializeOBjectToMemoryStream()
        {
            MemoryStream stream = new MemoryStream();
            await Cbor.SerializeAsync(SimpleObject, typeof(SimpleObject), stream, Options);

            TestBuffer(stream.ToArray());
        }
        public async Task DeserializeFromMemoryStream()
        {
            MemoryStream stream = new MemoryStream(SimpleObjectHexBuffer.HexToBytes());
            SimpleObject obj    = await Cbor.DeserializeAsync <SimpleObject>(stream);

            TestSimpleObject(obj);
        }
 public void SerializeObjectToBufferWriter()
 {
     using (ByteBufferWriter bufferWriter = new ByteBufferWriter())
     {
         Cbor.Serialize(SimpleObject, typeof(SimpleObject), bufferWriter, Options);
         TestBuffer(bufferWriter.WrittenSpan.ToArray());
     }
 }
        public static byte[] Normalize(byte[] denormalized)
        {
            var root   = Cbor.Deserialize <CborValue>(denormalized);
            var buffer = new MemoryStream();

            Normalize(buffer, root);
            return(buffer.ToArray());
        }
Esempio n. 10
0
 public static byte[] Serialize(object data)
 {
     using (var buffer = new ByteBufferWriter())
     {
         Cbor.Serialize(data, data.GetType(), buffer, Options);
         return(buffer.WrittenSpan.ToArray());
     }
 }
Esempio n. 11
0
        public void Test()
        {
            const string hexBuffer = "BF65627974657341016C64657374696E6174696F6E738151027BE4CA91F62F11794CCF66A92B7714066466726F6D58270402023B2DC2EAA3A237C9AB13E3EC0357679DB51EFB63A7DC95980AD81A90D9B0EBD30C695A1B686D65746144617461BF6B6170706C69636174696F6E6474657374FF656E6F6E63651B1E4498A9ECD5A1876A73657269616C697A65727772616469782E7061727469636C65732E6D65737361676562746F58270402023B2DC2EAA3A237C9AB13E3EC0357679DB51EFB63A7DC95980AD81A90D9B0EBD30C695A1B6776657273696F6E1864FF";

            byte[]     data = hexBuffer.HexToBytes();
            CborObject obj  = Cbor.Deserialize <CborObject>(data);

            Assert.NotNull(obj);
            Assert.Equal(8, obj.Count);
        }
        public void ReadAnonymous()
        {
            CborOptions options = new CborOptions();

            const string hexBuffer = @"A26249640C644E616D6563666F6F";
            var          prototype = new { Id = default(int), Name = default(string) };

            Span <byte> buffer = hexBuffer.HexToBytes();
            var         obj    = Cbor.DeserializeAnonymousType(buffer, prototype, options);

            Assert.Equal(12, obj.Id);
            Assert.Equal("foo", obj.Name);
        }
        public async Task SerializeObjectToFileStream()
        {
            string tempFileName = Path.GetTempFileName();

            try
            {
                using (FileStream stream = File.OpenWrite(tempFileName))
                {
                    await Cbor.SerializeAsync(SimpleObject, typeof(SimpleObject), stream, Options);
                }

                byte[] actualBuffer = File.ReadAllBytes(tempFileName);
                TestBuffer(actualBuffer);
            }
            finally
            {
                File.Delete(tempFileName);
            }
        }
        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);
            }
        }
Esempio n. 15
0
        public override Task WriteResponseBodyAsync(OutputFormatterWriteContext context)
        {
#if (NETCOREAPP2_1 || NETCOREAPP2_2)
            return(Cbor.SerializeAsync(context.Object, context.ObjectType, context.HttpContext.Response.Body, _cborOptions));
#else
            PipeWriter writer = context.HttpContext.Response.BodyWriter;
            Cbor.Serialize(context.Object, context.ObjectType, writer, _cborOptions);

            ValueTask <FlushResult> flushTask = writer.FlushAsync();

            if (flushTask.IsCompleted)
            {
                ValueTask completeTask = writer.CompleteAsync();

                if (completeTask.IsCompleted)
                {
                    return(Task.CompletedTask);
                }

                return(FinishCompleteAsync(completeTask));
            }

            return(FinishFlushAsync(flushTask));

            async Task FinishFlushAsync(ValueTask <FlushResult> localFlushTask)
            {
                await localFlushTask.ConfigureAwait(false);

                await writer.CompleteAsync();
            }

            async Task FinishCompleteAsync(ValueTask localCompleteTask)
            {
                await localCompleteTask.ConfigureAwait(false);
            }
#endif
        }
Esempio n. 16
0
 public static T Deserialize <T>(byte[] bytes)
 {
     return(Cbor.Deserialize <T>(bytes, Options));
 }
Esempio n. 17
0
 public void Serialize()
 {
     byte[] cbor = SerializationUtils.Serialize(new ImmutableClass(4));
     Assert.AreEqual("{\"baseField\":1,\"publicField\":2,\"privateField\":3,\"readonlyField\":4}", Cbor.ToJson(cbor));
 }
 public Task SerializeDahomey()
 {
     return(Cbor.SerializeAsync(document, Stream.Null, CborOptions.Default));
 }