@@ -98,41 +98,25 @@ public object Deserialize(Type type, Stream stream)
9898 public async Task < T > DeserializeAsync < T > ( Stream stream , CancellationToken cancellationToken = default ( CancellationToken ) )
9999 {
100100 if ( stream == null ) return default ( T ) ;
101- using ( var streamReader = new StreamReader ( stream ) )
102- using ( var jsonTextReader = new JsonTextReader ( streamReader ) )
103- {
104- //JsonSerializerInternalReader that's is used in `Deserialize()` from the synchronous codepath
105- // has the same try catch
106- // https://github.com/JamesNK/Newtonsoft.Json/blob/master/Src/Newtonsoft.Json/Serialization/JsonSerializerInternalReader.cs#L145
107- // :/
108- try
109- {
110- var token = await JToken . LoadAsync ( jsonTextReader , cancellationToken ) . ConfigureAwait ( false ) ;
111- return token . ToObject < T > ( this . Serializer ) ;
112- }
113- catch
114- {
115- return default ( T ) ;
116- }
117- }
101+ var bytes = await ReadToBytesAsync ( stream , cancellationToken ) ;
102+
103+ if ( bytes == null || bytes . Length == 0 ) return default ( T ) ;
104+ using ( var ms = new MemoryStream ( bytes ) )
105+ using ( var sr = new StreamReader ( ms ) )
106+ using ( var jtr = new JsonTextReader ( sr ) )
107+ return this . Serializer . Deserialize < T > ( jtr ) ;
118108 }
119109
120110 public async Task < object > DeserializeAsync ( Type type , Stream stream , CancellationToken cancellationToken = default ( CancellationToken ) )
121111 {
122112 if ( stream == null ) return type . DefaultValue ( ) ;
123- using ( var streamReader = new StreamReader ( stream ) )
124- using ( var jsonTextReader = new JsonTextReader ( streamReader ) )
125- {
126- try
127- {
128- var token = await JToken . LoadAsync ( jsonTextReader , cancellationToken ) . ConfigureAwait ( false ) ;
129- return token . ToObject ( type , this . Serializer ) ;
130- }
131- catch
132- {
133- return type . DefaultValue ( ) ;
134- }
135- }
113+ var bytes = await ReadToBytesAsync ( stream , cancellationToken ) ;
114+
115+ if ( bytes == null || bytes . Length == 0 ) return type . DefaultValue ( ) ;
116+ using ( var ms = new MemoryStream ( bytes ) )
117+ using ( var sr = new StreamReader ( ms ) )
118+ using ( var jtr = new JsonTextReader ( sr ) )
119+ return this . Serializer . Deserialize ( jtr , type ) ;
136120 }
137121
138122 private JsonSerializerSettings CreateSettings ( SerializationFormatting formatting )
@@ -150,5 +134,15 @@ private JsonSerializerSettings CreateSettings(SerializationFormatting formatting
150134
151135 return settings ;
152136 }
137+
138+ private static async Task < byte [ ] > ReadToBytesAsync ( Stream stream , CancellationToken cancellationToken )
139+ {
140+ if ( stream is MemoryStream o ) return o . ToArray ( ) ;
141+ using ( var ms = new MemoryStream ( ) )
142+ {
143+ await stream . CopyToAsync ( ms , ResponseBuilder . BufferSize , cancellationToken ) ;
144+ return ms . ToArray ( ) ;
145+ }
146+ }
153147 }
154148}
0 commit comments