1

What's the equivalent to this in System.Text.Json?

System.IO.Stream stream;

using (var streamReader = new StreamReader(stream))
{
    using (var jsonTextReader = new JsonTextReader(streamReader))
    {
        var jsonSerializer = new JsonSerializer();
        return jsonSerializer.Deserialize<T>(jsonTextReader);
    }
}

This is as far as I got:

using (var streamReader = new StreamReader(stream))
{                
    using (var jsonTextReader = new Utf8JsonReader(streamReader))
    {                    
        return JsonSerializer.Deserialize<T>(jsonTextReader);
    }
}

Utf8JsonReader doesn't have an option for a stream reader...

Guru Stron
  • 102,774
  • 10
  • 95
  • 132
O.O
  • 11,077
  • 18
  • 94
  • 182
  • Does this answer your question? [Parsing a JSON file with .NET core 3.0/System.text.Json](https://stackoverflow.com/questions/54983533/parsing-a-json-file-with-net-core-3-0-system-text-json) – Rahul Sharma Mar 23 '22 at 14:23
  • Looking for a built-in solution...not someone's custom wrapper code. – O.O Mar 23 '22 at 14:36
  • [Read from a stream using Utf8JsonReader](https://learn.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-use-dom-utf8jsonreader-utf8jsonwriter?pivots=dotnet-6-0#read-from-a-stream-using-utf8jsonreader) – Alexander Petrov Mar 23 '22 at 17:26

1 Answers1

0

Since .NET 6 JsonSerializer.Deserialize has an overload accepting Stream, so you can deserialize from Stream directly (assuming that the stream is encoded in UTF-8):

return JsonSerializer.Deserialize<T>(stream);
Guru Stron
  • 102,774
  • 10
  • 95
  • 132
  • 1
    Of note: synchronous deserialization from streams via [`Deserialize(Stream, JsonSerializerOptions)`](https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializer.deserialize?view=net-6.0#system-text-json-jsonserializer-deserialize-1(system-io-stream-system-text-json-jsonserializeroptions)) is new in .NET 6, in .NET 5 there was only [`DeserializeAsync(Stream, JsonSerializerOptions, CancellationToken)`](https://docs.microsoft.com/en-us/dotnet/api/system.text.json.jsonserializer.deserializeasync?view=net-5.0#system-text-json-jsonserializer-deserializeasync-1). – dbc Mar 23 '22 at 20:25
  • `Stream` is not `StreamReader` – liangli Jul 23 '22 at 06:47
  • @liangli yes, sure. AFAIK you need to use it as adapter to deserialize stream with Newtonsoft Json.NET, while you can directly deserialize properly encoded stream with `System.Text.Json` . – Guru Stron Jul 23 '22 at 06:55