【问题标题】:REST JSON, Server lmit of 50 records, get all records (updated with current example)REST JSON,服务器限制 50 条记录,获取所有记录(使用当前示例更新)
【发布时间】:2018-09-11 13:10:19
【问题描述】:

我正在使用 REST API 来获取 JSON。所有者规定了 50 个结果的限制。有人可以建议任何有关如何获取所有记录然后将它们反序列化到列表中的链接/教程吗?

我正在使用 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。'

我刚刚达到我目前理解的极限,感谢任何关于如何通过终点线的指示。

谢谢。

【问题讨论】:

  • 能否提供更多细节?此类响应通常包括记录总数,您将继续查询,同时增加请求的页码,直到您拥有所有内容。即/api/items?page=1/api/items?page=2
  • 请阅读:dev.jamasoftware.com/rest#lists API 支持分页。你只需要发送一个startAt 参数。
  • 文档指出列表上最多实现 50 条记录。 dev.jamasoftware.com/rest#lists
  • 我的解释是,您可以每个请求检索 50 个项目并发出后续请求以获取其余数据,每次将 startAt 参数递增到适当的值.为此,您将需要某种循环。

标签: c# json restsharp


【解决方案1】:

this 解释说,Jama SaaS API 最多允许返回 50 条记录,如果您想要超过 50 条记录,则必须进行多次调用。这可以通过一个简单的for 循环来完成。

【讨论】:

  • 我知道您还没有足够的代表来评论问题,但您发布的答案实际上并未尝试回答用户的问题,因此我将其标记为此类。
  • @RomanMarusyk 我更新了我的答案,据我所知提供了答案
猜你喜欢
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 2017-11-04
  • 2013-08-29
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多