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