REST JSON, сервер lmit из 50 записей, получить все записи (обновлено в текущем примере) - PullRequest
0 голосов
/ 11 сентября 2018

Я использую REST API для получения JSON.Владелец ввел ограничение в 50 результатов.Может кто-нибудь предложить какие-либо ссылки / учебные пособия о том, как я могу получить все записи и затем derserialisze их в список?

Я использую RestSharp & C #

Со времени публикации этого вопроса вчера я пыталсяработать через решение, которое создает новый метод, который может использоваться во всех вызовах REST.Вот что у меня есть:

    public T getAllRecords<T>(List<T> genericList, string RestCommand, string[,] parameters)
    {

        int pageCount = 50;
        var client = new RestClient("https://******************************");
        client.Authenticator = new HttpBasicAuthenticator("*******", "*******");

        var request = new RestRequest(RestCommand, Method.GET);
        // add the parameters
        for (int i = 0; i < parameters.Length / 2; i++)
        {
            request.AddParameter(parameters[i, 0], parameters[i, 1]);
        }


            var response = client.Execute(request);
        var content = response.Content;

        if (typeof(T) == typeof(Rootobject))
        {
            List<Rootobject> tempObject = new List<Rootobject>();
            tempObject.Cast<Rootobject>();
            Rootobject myRel = JsonConvert.DeserializeObject<Rootobject>(content);
            tempObject.Add(myRel);

            // create logic for looping through remaining records
            int totalRecords = myRel.meta.pageInfo.totalResults;
            do
            {
                request.AddParameter("startAt", pageCount);
                response = client.Execute(request);
                content = response.Content;
                Rootobject myRel1 = JsonConvert.DeserializeObject<Rootobject>(content);
                tempObject.Add(myRel1);
                pageCount += 50;
            } while (pageCount <= totalRecords);

            List<Item.Datum> totalList = new List<Item.Datum>();
            foreach (Rootobject rootItem in tempObject)
            {
                foreach (Item.Datum item in rootItem.data)
                {
                    totalList.Add(item);
                }
            }

            return (T)Convert.ChangeType(totalList, typeof(Item.Datum));


        }

        return default(T);

    }

Я называю это так:

var allItems = getAllRecords(new List<Rootobject>(), "abstractitems", new string[,] { { "project", "001" }, { "itemType", "151" }, { "maxResults", "50" } });

Я ожидал, что он перенастроит список объектов типа Item.Datum , однако он выдает ошибку:

System.InvalidCastException: «Объект должен реализовывать IConvertible.»

Я почти достиг предела моего текущего понимания, оцените любые указатели относительнокак пройти через финишную черту.

Спасибо.

1 Ответ

0 голосов
/ 11 сентября 2018

Поскольку это объясняет, что API Jama SaaS позволяют возвращать максимум 50 записей, вам нужно будет сделать несколько вызовов, если вы хотите больше, чем эти 50 записей. Это можно сделать с помощью простого цикла for.

...