【发布时间】: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参数递增到适当的值.为此,您将需要某种循环。