public Tuple <List <Issue>, Dictionary <string, List <JContainer> > > GetAllIssuesInSprint(int sprintId, List <string> mandatoryFields = null, List <string> customFields = null) { Dictionary <string, List <JContainer> > customData = new Dictionary <string, List <JContainer> >(); var issues = new List <Issue>(); int retries = 0; const int pageSize = 1000; int issueCount; do { string x = _webRequester.HttpGetByWebRequest(GetSprintIssuesPath(sprintId, pageSize, retries, mandatoryFields), _username, _password); var deserializedCall = JsonConvert.DeserializeObject <SprintIssuesDTO>(x); var data = JObject.Parse(x); if (customFields != null) { foreach (var issue in data["issues"]) { List <JContainer> issueCustomValues = new List <JContainer>(); foreach (var field in customFields) { issueCustomValues.Add(issue["fields"][field]?.Parent); } customData.Add(issue["key"].Value <string>(), issueCustomValues); } } issues.AddRange(deserializedCall.issues); issueCount = deserializedCall.issues.Count; AdaptCloudDataIfNeeded(deserializedCall.issues); retries++; } while (issueCount >= pageSize); return(new Tuple <List <Issue>, Dictionary <string, List <JContainer> > >(issues, customData)); }