From 4e12e977f1b48d13f17209c28bcce2bf09dda7f8 Mon Sep 17 00:00:00 2001 From: JT Date: Thu, 28 Jul 2022 16:56:10 +0800 Subject: [PATCH] Fix handling of large streams --- .../Converters/TupleConverterBase.cs | 22 ++----------- TupleJsonUnitTests/TupleJsonUnitTests.csproj | 13 +++++--- TupleJsonUnitTests/UnitTests.cs | 32 +++++++++++++++++++ 3 files changed, 42 insertions(+), 25 deletions(-) diff --git a/TupleAsJsonArray/Converters/TupleConverterBase.cs b/TupleAsJsonArray/Converters/TupleConverterBase.cs index 52257c2..8c29d5f 100644 --- a/TupleAsJsonArray/Converters/TupleConverterBase.cs +++ b/TupleAsJsonArray/Converters/TupleConverterBase.cs @@ -24,16 +24,7 @@ public abstract class TupleConverterBase : JsonConverter /// Existing Options protected void WriteValue(Utf8JsonWriter writer, T value, JsonSerializerOptions options) { - var converter = (JsonConverter)options.GetConverter(typeof(T)); - - if (converter == null) - { - JsonSerializer.Serialize(writer, value, options); - } - else - { - converter.Write(writer, value, options); - } + JsonSerializer.Serialize(writer, value, options); } /// @@ -45,16 +36,7 @@ protected void WriteValue(Utf8JsonWriter writer, T value, JsonSerializerOptio /// Deserialized Value protected T ReadValue(ref Utf8JsonReader reader, JsonSerializerOptions options) { - var converter = (JsonConverter)options.GetConverter(typeof(T)); - - if (converter == null) - { - return JsonSerializer.Deserialize(ref reader, options); - } - else - { - return converter.Read(ref reader, typeof(T), options); - } + return JsonSerializer.Deserialize(ref reader, options); } } } diff --git a/TupleJsonUnitTests/TupleJsonUnitTests.csproj b/TupleJsonUnitTests/TupleJsonUnitTests.csproj index 1715a2a..22783ab 100644 --- a/TupleJsonUnitTests/TupleJsonUnitTests.csproj +++ b/TupleJsonUnitTests/TupleJsonUnitTests.csproj @@ -1,15 +1,18 @@ - netcoreapp3.1 + netcoreapp3.1;net6.0 false - - - - + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + diff --git a/TupleJsonUnitTests/UnitTests.cs b/TupleJsonUnitTests/UnitTests.cs index 1fd1c7e..4093c2e 100644 --- a/TupleJsonUnitTests/UnitTests.cs +++ b/TupleJsonUnitTests/UnitTests.cs @@ -1,7 +1,10 @@ using Microsoft.VisualStudio.TestTools.UnitTesting; using System; +using System.Collections.Generic; +using System.IO; using System.Runtime.CompilerServices; using System.Text.Json; +using System.Threading.Tasks; using TupleAsJsonArray; using static TupleJsonUnitTests.TestHelper; @@ -154,5 +157,34 @@ public void GinormousTuple() Assert.AreEqual(valueTuple, valueTuple2); } +#if NET6_0_OR_GREATER + [TestMethod] + public async Task ReadLargeStreamWithUnusualRecords() + { + var options = new JsonSerializerOptions(); + options.Converters.Add(new TupleConverterFactory()); + + var biglist = new List<(Guid, DataRecord)>(); + + for (int i = 0; i < 100000; i++) + { + biglist.Add((Guid.NewGuid(), new DataRecord(new[] { "blah" }))); + } + + var memoryStream = new MemoryStream(); + + await JsonSerializer.SerializeAsync(memoryStream, biglist, options); + memoryStream.Position = 0; + + await JsonSerializer.DeserializeAsync>(memoryStream, options); + } + + public record DataRecord(string[] Strings) + { + public string SomeInternalValue => "example"; + } +#endif + + } }