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));
                }
            }
        }