Skip to content

Commit f8e4b14

Browse files
author
RTLcoil
authored
Speedup JSON parsing
1 parent 41f8979 commit f8e4b14

File tree

1 file changed

+16
-12
lines changed

1 file changed

+16
-12
lines changed

CloudinaryDotNet/ApiShared.Internal.cs

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,8 @@ internal static async Task<T> ParseAsync<T>(HttpResponseMessage response)
3333
where T : BaseResult
3434
{
3535
using (var stream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false))
36-
using (var reader = new StreamReader(stream))
3736
{
38-
var s = await reader.ReadToEndAsync().ConfigureAwait(false);
39-
return CreateResult<T>(response, s);
37+
return CreateResult<T>(response, stream);
4038
}
4139
}
4240

@@ -50,10 +48,8 @@ internal static T Parse<T>(HttpResponseMessage response)
5048
where T : BaseResult
5149
{
5250
using (var stream = response.Content.ReadAsStreamAsync().GetAwaiter().GetResult())
53-
using (var reader = new StreamReader(stream))
5451
{
55-
var s = reader.ReadToEnd();
56-
return CreateResult<T>(response, s);
52+
return CreateResult<T>(response, stream);
5753
}
5854
}
5955

@@ -256,22 +252,30 @@ protected void HandleUnsignedParameters(IDictionary<string, object> parameters)
256252
}
257253
}
258254

259-
private static T CreateResult<T>(HttpResponseMessage response, string s)
255+
private static T CreateResult<T>(HttpResponseMessage response, Stream s)
260256
where T : BaseResult
261257
{
262-
var result = CreateResultFromString<T>(s, response.StatusCode);
258+
var result = CreateResultFromStream<T>(s, response.StatusCode);
263259
UpdateResultFromResponse(response, result);
264260
return result;
265261
}
266262

267-
private static T CreateResultFromString<T>(string s, HttpStatusCode statusCode)
263+
private static T CreateResultFromStream<T>(Stream s, HttpStatusCode statusCode)
268264
where T : BaseResult
269265
{
270266
try
271267
{
272-
var result = JsonConvert.DeserializeObject<T>(s);
273-
result.JsonObj = JToken.Parse(s);
274-
return result;
268+
using (var streamReader = new StreamReader(s))
269+
{
270+
using (var jsonReader = new JsonTextReader(streamReader))
271+
{
272+
var jsonObj = JToken.Load(jsonReader);
273+
var result = jsonObj.ToObject<T>();
274+
result.JsonObj = jsonObj;
275+
276+
return result;
277+
}
278+
}
275279
}
276280
catch (JsonException jex)
277281
{

0 commit comments

Comments
 (0)