public PagedResults <T> DeserializeToPagedResults <T>(string jsonResponse) where T : class, new() { if (jsonResponse.IsNullOrWhiteSpace()) { throw new ArgumentNullException(nameof(jsonResponse), $"Could not deserialize null or empty input for type '{typeof(T).Name}'."); } using (var sr = new StringReader(jsonResponse)) { using (JsonReader reader = new JsonTextReader(sr)) { var total = 0; var offset = 0; var limit = 0; List <T> list = null; while (reader.Read()) { if (reader.TokenType != JsonToken.PropertyName) { continue; } switch (reader.Value) { case RedmineKeys.TOTAL_COUNT: total = reader.ReadAsInt32().GetValueOrDefault(); break; case RedmineKeys.OFFSET: offset = reader.ReadAsInt32().GetValueOrDefault(); break; case RedmineKeys.LIMIT: limit = reader.ReadAsInt32().GetValueOrDefault(); break; default: list = reader.ReadAsCollection <T>(); break; } } return(new PagedResults <T>(list, total, offset, limit)); } } }