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()); }
public static byte[] Serialize(object data) { using (var buffer = new ByteBufferWriter()) { Cbor.Serialize(data, data.GetType(), buffer, Options); return(buffer.WrittenSpan.ToArray()); } }
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); } }
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 }
public static T Deserialize <T>(byte[] bytes) { return(Cbor.Deserialize <T>(bytes, Options)); }
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)); }