public override async Task <InputFormatterResult> ReadRequestBodyAsync(InputFormatterContext context, Encoding encoding) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (encoding == null) { throw new ArgumentNullException(nameof(encoding)); } var request = context.HttpContext.Request; var buffer = new ResizableMemory <byte>(1024 * 4); try { var read = await request.Body.ReadAsync(buffer.RequestMemory(1024 * 4)); while (read > 0) { buffer.Advance(read); read = await request.Body.ReadAsync(buffer.RequestMemory(1024 * 4)); } if (encoding == Encoding.UTF8) { var obj = _serializer.ReadUtf8(context.ModelType, buffer.AsReadOnlySpan()); return(InputFormatterResult.Success(obj)); } else if (encoding == Encoding.Unicode) { var obj = _serializer.ReadUtf16(context.ModelType, buffer.AsReadOnlySpan()); return(InputFormatterResult.Success(obj)); } else { throw new ArgumentOutOfRangeException(nameof(encoding)); } } catch (SerializationException) { return(InputFormatterResult.Failure()); } catch (Exception ex) { throw new InputFormatterException($"Failed to deserialize {context.ModelType}", ex); } finally { buffer.Return(); } }
public object ReadUtf16(Type type, ResizableMemory <byte> data, ValueConverter converter = null) => ReadUtf16(type, data.AsReadOnlySpan(), converter);
public T ReadUtf16 <T>(ResizableMemory <byte> data, ValueConverter <T> converter = null) => ReadUtf16(data.AsReadOnlySpan(), converter);
public object ReadUtf16(Type type, ResizableMemory <char> data, ValueConverter converter = null) => ReadUtf16(type, MemoryMarshal.AsBytes(data.AsReadOnlySpan()), converter);
public T ReadUtf16 <T>(ResizableMemory <char> data, ValueConverter <T> converter = null) => ReadUtf16(MemoryMarshal.AsBytes(data.AsReadOnlySpan()), converter);