Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C逐页解析JSON URL#_C#_Asp.net_Json_Json.net_Paging - Fatal编程技术网

C# 如何使用C逐页解析JSON URL#

C# 如何使用C逐页解析JSON URL#,c#,asp.net,json,json.net,paging,C#,Asp.net,Json,Json.net,Paging,我不熟悉c#和JSON。我试图解析一个JSON URL,它的请求限制为每页100个对象。即使21页中有2022个对象,我也无法检索到超过第一页的包含100个对象的页面 允许解析所有22页JSON对象的代码中缺少了什么 提前感谢您的帮助 对象总数由HTTP响应头给出:X-total-count public class VCUtils { public const string HeaderRateLimit = "X-Rate-Limit-Limit"; public const

我不熟悉c#和JSON。我试图解析一个JSON URL,它的请求限制为每页100个对象。即使21页中有2022个对象,我也无法检索到超过第一页的包含100个对象的页面

允许解析所有22页JSON对象的代码中缺少了什么

提前感谢您的帮助

对象总数由HTTP响应头给出:X-total-count

public class VCUtils
{
    public const string HeaderRateLimit = "X-Rate-Limit-Limit";
    public const string HeaderRateRemaining = "X-Rate-Limit-Remaining";
    public const string HeaderRateReset = "X-Rate-Limit-Reset";
    public const string HeaderCountTotal = "X-Total-Count";
}
下面是我的测试代码

 protected void Page_Load(object sender, EventArgs e)
{


    string baseURL = "https://api.veracross.com/vcdemo3/v2/students.json?page=";
    int recordcount = 1;
    int nextPage = 1;
    int totalObjectCount = 0;
    int defaultObjectsPerPage = 100;
    int pageCount = 1000;

    try
    {

        while (nextPage <= pageCount)  //pageCount
        {
            string jsonData = "";

            var req = (HttpWebRequest)WebRequest.Create(baseURL + nextPage);
            req.Credentials = new NetworkCredential(vcAPIUsername, vcAPIPassword);
            req.PreAuthenticate = true;
            HttpWebResponse response = req.GetResponse() as HttpWebResponse;

            using (var reader = new System.IO.StreamReader(response.GetResponseStream())) { jsonData = reader.ReadToEnd(); }
            // get total number of objects and calculate the page count
            if (response.Headers[VCUtils.HeaderCountTotal] != null)
            {
                totalObjectCount = Convert.ToInt16(response.Headers[VCUtils.HeaderCountTotal]);

                pageCount = (int)Math.Ceiling((double)totalObjectCount / (double)defaultObjectsPerPage);
            }


            VCStudents studentObj = new VCStudents();
            IList<VCStudents> validStudents;

            // Call the JSON.NET deserializer helper method
            validStudents = VCUtils.DeserializeToList<VCStudents>(jsonData);



            foreach (var item in validStudents)
            {
                var studs = item.GetType().GetProperties();
                //**

                int stkey = item.person_pk; //possibly legacy fields
                string surname = item.last_name;
                string first_name = item.first_name;
                string pref_name = item.preferred_name;
                string st_mobile = item.mobile_phone;
                string st_email = item.email_1;
                int gsis_id = item.person_pk;
                string birthdate = item.birthday;

                string gender = item.gender;
                string lastupdatedate = item.update_date;
                var fdkey = item.first_name; 


                Literal1.Text = Literal1.Text + recordcount + ") " + stkey + " " + surname + " " + first_name + " " + pref_name + " " + st_mobile + " " + st_email + " " + gsis_id + " " + birthdate + " " + roll_group + " " + gender + " " + fdkey + " " + lastupdatedate + "</br> ";

                recordcount = recordcount + 1;
            }

            nextPage = nextPage + 1;
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
     finally
     {

     }
}
受保护的无效页面加载(对象发送方,事件参数e)
{
字符串baseURL=”https://api.veracross.com/vcdemo3/v2/students.json?page=";
int recordcount=1;
int nextPage=1;
int totalObjectCount=0;
int defaultObjectsPerPage=100;
int pageCount=1000;
尝试
{

而(下一页我怀疑您是否使用此代码获得准确的总数:

totalObjectCount = Convert.ToInt16(response.Headers[VCUtils.HeaderCountTotal]);
您可以尝试以下方法:

totalObjectCount = Convert.ToInt32(response.Headers.Get(VCUtils.HeaderCountTotal));

查看MSDN的更多详细信息:

是的,非常好,这是正确的答案!谢谢!
totalObjectCount = Convert.ToInt16(response.Headers[VCUtils.HeaderCountTotal]);
totalObjectCount = Convert.ToInt32(response.Headers.Get(VCUtils.HeaderCountTotal));