簡體   English   中英

反序列化的Xml對象循環引發NullReferenceException

[英]Deserialized Xml Object Loop Throws NullReferenceException

這是另一個問題的延續,可以在此處找到與該問題相關的所有代碼。 我遇到一個奇怪的NullReferenceException錯誤,我無法弄清。 我正在嘗試從反序列化的Web響應構建表。 當我遍歷對象項時,我遇到了一個N​​RE。 奇怪的是我自己測試了條件聲明,並且能夠抓住它。 這是我的代碼:

    public string getExample()
    {
        DataTable dt = new DataTable();
        XmlSerializer serializer = new XmlSerializer(typeof(WeeklyJobs));
        WeeklyJobs jobs;
        string xml = @"<?xml version = ""1.0""?>"
            + @"<WeeklyJobs>"
            + @"<DailyJobs Date = ""02/03/2012""/>"
            + @"<DailyJobs Date = ""02/04/2012"" TotalJobs = ""2"">"
            + @"<Jobs>"
            + @"<Job JobName = ""Job Name"" Description = ""Description""/>"
            + @"<Job JobName = ""Job Name"" Description = ""Description""/>"
            + @"</Jobs>"
            + @"</DailyJobs>"
            + @"<DailyJobs Date = ""02/05/2012"" TotalJobs = ""1"">"
            + @"<Jobs>"
            + @"<Job JobName = ""Job Name"" Description = ""Description""/>"
            + @"</Jobs>"
            + @"</DailyJobs>"
            + @"<DailyJobs Date = ""02/06/2012"" TotalJobs = ""2"">"
            + @"<Jobs>"
            + @"<Job JobName = ""Job Name"" Description = ""Description""/>"
            + @"<Job JobName = ""Job Name"" Description = ""Description""/>"
            + @"</Jobs>"
            + @"</DailyJobs>"
            + @"<DailyJobs Date = ""02/07/2012""/>"
            + @"</WeeklyJobs>";

        // Create an XmlTextReader
        using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
        {
            jobs = (WeeklyJobs)serializer.Deserialize(reader);
        }

    // Create Table
        dt.Columns.Add("Date");
        dt.Columns.Add("JobName");
        dt.Columns.Add("Description");

        for (int i = 0; i < jobs.Items.Length; i++ )
        {
            DataRow dr;
            object[] rowItems = null;
            rowItems[0] = jobs.Items[i].Date;
            if(jobs.Items[i].Jobs == null || jobs.Items[i].Jobs.Length == 0) //NRE is thrown Here <--
            {
                rowItems[1] = "";
                rowItems[2] = "";
            }
            else
            {
                foreach (WeeklyJobsDailyJobsJobsJob job in jobs.Items[i].Jobs)
                {
                    rowItems[1] = job.JobName;
                    rowItems[2] = job.Description;
                }
            }

            dr = dt.NewRow();
            dr.ItemArray = rowItems;
            dt.Rows.Add(dr);
        }

        return dt.Rows.Count.ToString();
    }

現在,這是我不知道的部分。 當我注釋掉“創建表”代碼並在我知道為null的項目上添加if語句時,該條件會正確處理它。 這是我在注釋掉“創建表”代碼后添加的內容:

        if(jobs.Items[0].Jobs == null)
        {
            return "null";
        }
        else
        {
            return jobs.Items[0].Jobs.Length.ToString();
        }

並且它返回“ null”。 我不確定發生了什么。 也許我的for循環未正確設置? 謝謝你的幫助!

您知道,我經常看到調試器異常發生后將執行點放在一行之后

也許這是您的問題:

object[] rowItems = null;
rowItems[0] = jobs.Items[i].Date;

NRE是由索引器調用將其拋出到空數組上的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM