/// <inheritdoc /> public T Deserialize <T>(ReadOnlyMemory <byte> buffer) { T value = default(T); if (buffer.Length == 0) { return(value); } using (var ms = new MemoryReaderStream(buffer)) { using (var sr = new StreamReader(ms)) { using (var jr = new JsonTextReader(sr)) { var serializer = JsonSerializer.Create(EffectiveDeserializationSettings); //use the following code block only for value types //strangely enough Nullable<T> itself is a value type so we need to filter it out if (typeof(T).GetTypeInfo().IsValueType&& (!typeof(T).GetTypeInfo().IsGenericType || typeof(T).GetGenericTypeDefinition() != typeof(Nullable <>))) { //we can't declare Nullable<T> because T is not restricted to struct in this method scope object nullableVal = serializer.Deserialize(jr, typeof(Nullable <>).MakeGenericType(typeof(T))); //either we have a null or an instance of Nullabte<T> that can be cast directly to T value = nullableVal == null ? default(T) : (T)nullableVal; } else { value = serializer.Deserialize <T>(jr); } } } } return(value); }
public void Seek_BeforeBeginning_ArgumentOutOfRange(int offset, SeekOrigin origin) { // Arrange var stream = new MemoryReaderStream(TestBytes.AsMemory()); // Act/Assert Assert.Throws <ArgumentOutOfRangeException>(() => stream.Seek(offset, origin)); }
public void Seek_Offset_ExpectedPosition(int offset, SeekOrigin origin, int expectedPosition) { // Arrange var stream = new MemoryReaderStream(TestBytes.AsMemory()); // Act stream.Seek(offset, origin); // Assert Assert.Equal(expectedPosition, stream.Position); }
public void Seek_SuccessiveCurrent_CorrectPosition() { // Arrange var stream = new MemoryReaderStream(TestBytes.AsMemory()); // Act stream.Seek(20, SeekOrigin.Current); stream.Seek(20, SeekOrigin.Current); stream.Seek(-5, SeekOrigin.Current); // Assert Assert.Equal(35, stream.Position); }
public void Seek_AfterEnd_EmptyRead(int offset, SeekOrigin origin) { // Arrange var stream = new MemoryReaderStream(TestBytes.AsMemory()); // Act stream.Seek(offset, origin); var actual = new byte[1]; var readBytes = stream.Read(actual, 0, actual.Length); // Assert Assert.Equal(0, readBytes); }
public void Read_Span_AdvancesPosition(int position, int length, int expectedPosition) { // Arrange var stream = new MemoryReaderStream(TestBytes.AsMemory()) { Position = position }; // Act var actual = new byte[length]; stream.Read(actual.AsSpan()); // Assert Assert.Equal(expectedPosition, stream.Position); }
public void Read_Span_ExpectedBytes(int position, byte[] expectedBytes) { // Arrange var stream = new MemoryReaderStream(TestBytes.AsMemory()) { Position = position }; // Act var actual = new byte[8]; var readBytes = stream.Read(actual.AsSpan()); // Assert Assert.Equal(expectedBytes.Length, readBytes); Assert.Equal(expectedBytes, actual.Take(readBytes)); }