@@ -98,41 +98,25 @@ public object Deserialize(Type type, Stream stream)
98
98
public async Task < T > DeserializeAsync < T > ( Stream stream , CancellationToken cancellationToken = default ( CancellationToken ) )
99
99
{
100
100
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 ) ;
118
108
}
119
109
120
110
public async Task < object > DeserializeAsync ( Type type , Stream stream , CancellationToken cancellationToken = default ( CancellationToken ) )
121
111
{
122
112
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 ) ;
136
120
}
137
121
138
122
private JsonSerializerSettings CreateSettings ( SerializationFormatting formatting )
@@ -150,5 +134,15 @@ private JsonSerializerSettings CreateSettings(SerializationFormatting formatting
150
134
151
135
return settings ;
152
136
}
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
+ }
153
147
}
154
148
}
0 commit comments