【发布时间】:2020-06-23 19:04:30
【问题描述】:
我正在调用一个 API,它以每页 5 个结果返回 JSON 格式的结果。我正在打 5 个电话以获得所有结果。我创建了一个自定义类型,可以毫无问题地反序列化第一个 JSON 页面。然后,我需要将其他页面添加到同一个对象,以便以后可以循环该对象以用作键/值查找。我通常编写 PHP 代码并简单地使用 array_push 来组合数组,然后循环遍历数组以找到我正在寻找的 id / display_number。
JSON
所有 JSON 格式如下。
{
"meta": {
"paging": {
"next": "https://URL/api/v4/companies.json?limit=5&page_token=t324vbf8673"
},
"records": 25
},
"data": [
{
"id": 1096720,
"display_number": "Company:00001"
},
{
"id": 1096723,
"display_number": "Company:00002"
},
{
"id": 1096726,
"display_number": "Company:00003"
},
{
"id": 1096729,
"display_number": "Company:00004"
},
{
"id": 1096732,
"display_number": "Company:00005"
},
}
守则
我正在使用它来反序列化为名为 Companies 的自定义类型对象
Companies Company = JsonConvert.DeserializeObject<Companies>(response.Content);
这部分很好,但显然在循环中,它会覆盖前一个对象,而不是合并成一个对象。
问题
如何将最后一页与上一页合并(共 5 页)?
编辑
API 调用:
public Companies GetCompanies(int records, string pageurl="")
{
var client = new RestClient();
if(pageurl != "")
{
client = new RestClient(pageurl);
}
else
{
client = new RestClient(this.BaseURI + "companies.json");
}
var request = new RestRequest(Method.GET);
request.AddHeader("cache-control", "no-cache");
request.AddHeader("content-type", "application/x-www-form-urlencoded");
request.AddHeader("Authorization", this.TokenType + " " + this.AccessToken);
request.AddParameter("limit", records);
IRestResponse response = client.Execute(request);
var content = response.Content;
Companies Company = JsonConvert.DeserializeObject<Companies>(response.Content);
return Company;
}
班级:
namespace Uploader
{
using System;
using System.Collections.Generic;
using System.Globalization;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public partial class Companies
{
[JsonProperty("meta")]
public Meta Meta { get; set; }
[JsonProperty("data")]
public Datum[] Data { get; set; }
}
public partial class Datum
{
[JsonProperty("id")]
public long Id { get; set; }
[JsonProperty("display_number")]
public string DisplayNumber { get; set; }
}
public partial class Meta
{
[JsonProperty("paging")]
public Paging Paging { get; set; }
[JsonProperty("records")]
public long Records { get; set; }
}
public partial class Paging
{
[JsonProperty("next")]
public Uri Next { get; set; }
}
}
我是如何使用课程的:
Companies GetCompanies = Clio.GetCompanies(5);
do
{
GetCompanies = Clio.GetCompanies(5, GetCompanies.Meta.Paging.Next.ToString());
} while (GetCompanies.Meta.Paging.Next != null);
【问题讨论】:
-
可以添加
Matters的代码吗?以及“我打了 5 次电话以获得所有结果”的代码?目前还不清楚您是否未能反序列化、寻找连接多个list<Matters>的方法,或者只是对我们看不到的逻辑有问题。 -
Companies和Matters类型之间有什么关系?你如何打电话来获取一个json? -
事务应该是公司。现已更正。
-
@xdtTransform 我已经把代码放在上面了。我不会反序列化。我可以很好地反序列化,但我不知道如何将 5 页结果组合成一个对象。这就是我正在努力解决的部分。