反序列化Xml对象循环抛出NullReferenceException

本文关键字:NullReferenceException 循环 Xml 对象 反序列化 | 更新日期: 2023-09-27 18:07:33

这是另一个问题的延续,与这个问题相关的所有代码都可以在这里找到。我正在经历一个奇怪的NullReferenceException错误,我只是无法弄清楚。我正试图从反序列化的web响应建立一个表。当我去迭代对象项时,我碰到了一个NRE。奇怪的是,我自己测试了条件语句,我能够捕捉到它。下面是我的代码:

    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();
    }

这是我不明白的部分。当我注释掉Create Table代码并在我知道为空的项上添加if语句时,条件会正确地处理它。下面是我注释掉Create Table代码后添加的内容:

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

返回"null"。我不知道发生了什么事。也许我的for循环没有正确设置?谢谢你的帮助!

反序列化Xml对象循环抛出NullReferenceException

你知道,我经常看到调试器在之后的行中把执行点作为异常,

也许这是你的问题:

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

NRE是由索引器调用null数组抛出的。