C# 如何在一个列表框中从XML文件加载数据

C# 如何在一个列表框中从XML文件加载数据,c#,c#-4.0,c#-3.0,C#,C# 4.0,C# 3.0,可能重复: 我有三门课: 首先是人: public class Person { public string FirstName { get; set; } public string LastName { get; set; } public string Email { get; set; } public Person() { } public override string ToString() {

可能重复:

我有三门课:

首先是人:

    public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }



    public Person()
    {
    }

    public override string ToString()
    {
        return FirstName + " " +LastName + "\t" +Email;
    }
}
二是:

     public class Student:Person
{

    public Student()
    {
    }
    public double AssessmentGrade { get; set; }
    public double AssignmentGrade { get; set; }

    public override string ToString()
    {
        return base.ToString() + "," +AssessmentGrade + "," + AssignmentGrade;
    }
}
三是:

   public class Teacher:Person
{
    public int RoomNumber
    {
        get;
        set;
    }

    public override string ToString()
    {
        return base.ToString() + "," + RoomNumber;
    }
}
我还有一个类,我只是从PeronDB(class)调用数据

公共阶层人士
{
私人名单人员=null;
填空
{
persons=PersonDB.GetPersons();
}
}
在persondb类中,如果它的学生节点读取数据,如果它的教师节点也读取数据,如果它是人,它也读取数据

    public class PersonDB
{
    private const string path = @"..\..\Persons.xml";

    public static List<Person> GetPersons()
    {
        List<Person> persons = new List<Person>();

        XmlReaderSettings settings = new XmlReaderSettings();
        settings.IgnoreWhitespace = true;
        settings.IgnoreComments = true;

        XmlReader xmlIn = XmlReader.Create(path, settings);

        if (xmlIn.ReadToDescendant("Student"))
        {
            do
            {
                Person person = new Person();
                Student student = (Student)person;
                xmlIn.ReadStartElement("Student");
                student.FirstName = xmlIn.ReadElementContentAsString();
                student.LastName = xmlIn.ReadElementContentAsString();
                student.Email = xmlIn.ReadElementContentAsString();
                student.AssessmentGrade = xmlIn.ReadElementContentAsInt();
                student.AssignmentGrade = xmlIn.ReadElementContentAsInt();

                persons.Add(student);
            } while (xmlIn.ReadToNextSibling("Student"));

        }

        else if (xmlIn.ReadToDescendant("Teacher"))
        {
            do
            {
                Person person = new Person();
                Teacher teacher = (Teacher)person;
                xmlIn.ReadStartElement("Teacher");
                teacher.FirstName = xmlIn.ReadElementContentAsString();
                teacher.LastName = xmlIn.ReadElementContentAsString();
                teacher.Email = xmlIn.ReadElementContentAsString();
                teacher.RoomNumber = xmlIn.ReadElementContentAsInt();

                persons.Add(teacher);
            } while (xmlIn.ReadToNextSibling("Teacher"));
        }

        if (xmlIn.ReadToDescendant("Person"))
        {
            do
            {
                Person person = new Person();

                xmlIn.ReadStartElement("Person");
                person.FirstName = xmlIn.ReadElementContentAsString();
                person.LastName = xmlIn.ReadElementContentAsString();
                person.Email = xmlIn.ReadElementContentAsString();

                persons.Add(person);
            } while (xmlIn.ReadToNextSibling("Person"));
        }


        xmlIn.Close();

        return persons;
    }
   } 
公共类人员b
{
私有常量字符串路径=@“.\..\Persons.xml”;
公共静态列表GetPersons()
{
列表人员=新列表();
XmlReaderSettings设置=新建XmlReaderSettings();
settings.IgnoreWhitespace=true;
settings.IgnoreComments=true;
XmlReader xmlIn=XmlReader.Create(路径、设置);
如果(xmlIn.ReadToDescendant(“学生”))
{
做
{
Person=新人();
学生=(学生)人;
xmlIn.ReadStartElement(“学生”);
student.FirstName=xmlIn.ReadElementContentAsString();
student.LastName=xmlIn.ReadElementContentAsString();
student.Email=xmlIn.ReadElementContentAsString();
student.AssessmentGrade=xmlIn.ReadElementContentAsInt();
student.AssignmentGrade=xmlIn.ReadElementContentAsInt();
添加(学生);
}而(xmlIn.ReadToNextSibling(“学生”);
}
else if(xmlIn.ReadToDescendant(“教师”))
{
做
{
Person=新人();
教师=(教师)人;
xmlIn.ReadStartElement(“教师”);
teacher.FirstName=xmlIn.ReadElementContentAsString();
teacher.LastName=xmlIn.ReadElementContentAsString();
teacher.Email=xmlIn.ReadElementContentAsString();
teacher.RoomNumber=xmlIn.ReadElementContentAsInt();
添加(教师);
}而(xmlIn.ReadToNextSibling(“教师”);
}
如果(xmlIn.ReadToDescendant(“人”))
{
做
{
Person=新人();
Xlin.ReadStartElement(“人员”);
person.FirstName=xmlIn.ReadElementContentAsString();
person.LastName=xmlIn.ReadElementContentAsString();
person.Email=xmlIn.ReadElementContentAsString();
人。添加(人);
}而(xmlIn.ReadToNextSibling(“人”);
}
xmlIn.Close();
返回人员;
}
} 
在我所做的表单加载中:

     Persons personList = null;

        private void FillPersonlstBox()
    {
        Person p;
        listBox1.Items.Clear();
        for (int i = 0; i < personList.Count; i++)
        {
            p = personList[i];
            listBox1.Items.Add(p.ToString());
        }
    }

    private void Load_Click(object sender, EventArgs e)
    {
        personList.Changed += new Persons.ChangeHandler(HandleChange);
        personList.Fill();
        FillPersonlstBox();
    }
personList=null;
私有void FillPersonlstBox()
{
人p;
listBox1.Items.Clear();
for(int i=0;i
它向我显示“{无法将类型为“Collection.Person”的对象强制转换为类型为“Collection.Student”。}此错误:(System.InvalidCastException它在PersonDB类中显示我”此错误。
请大家帮我修一下好吗?

不要把这个人演成学生或老师,见下文

    public class PersonDB
{
    private const string path = @"..\..\Persons.xml";

    public static List<Person> GetPersons()
    {
        List<Person> persons = new List<Person>();

        XmlReaderSettings settings = new XmlReaderSettings();
        settings.IgnoreWhitespace = true;
        settings.IgnoreComments = true;

        XmlReader xmlIn = XmlReader.Create(path, settings);

        if (xmlIn.ReadToDescendant("Student"))
        {
            do
            {

                Student student = new Student();
                xmlIn.ReadStartElement("Student");
                student.FirstName = xmlIn.ReadElementContentAsString();
                student.LastName = xmlIn.ReadElementContentAsString();
                student.Email = xmlIn.ReadElementContentAsString();
                student.AssessmentGrade = xmlIn.ReadElementContentAsInt();
                student.AssignmentGrade = xmlIn.ReadElementContentAsInt();

                persons.Add(student);
            } while (xmlIn.ReadToNextSibling("Student"));

        }

        else if (xmlIn.ReadToDescendant("Teacher"))
        {
            do
            {

                Teacher teacher = new Teacher();
                xmlIn.ReadStartElement("Teacher");
                teacher.FirstName = xmlIn.ReadElementContentAsString();
                teacher.LastName = xmlIn.ReadElementContentAsString();
                teacher.Email = xmlIn.ReadElementContentAsString();
                teacher.RoomNumber = xmlIn.ReadElementContentAsInt();

                persons.Add(teacher);
            } while (xmlIn.ReadToNextSibling("Teacher"));
        }

        if (xmlIn.ReadToDescendant("Person"))
        {
            do
            {
                Person person = new Person();

                xmlIn.ReadStartElement("Person");
                person.FirstName = xmlIn.ReadElementContentAsString();
                person.LastName = xmlIn.ReadElementContentAsString();
                person.Email = xmlIn.ReadElementContentAsString();

                persons.Add(person);
            } while (xmlIn.ReadToNextSibling("Person"));
        }


        xmlIn.Close();

        return persons;
    }
   } 
公共类人员b
{
私有常量字符串路径=@“.\..\Persons.xml”;
公共静态列表GetPersons()
{
列表人员=新列表();
XmlReaderSettings设置=新建XmlReaderSettings();
settings.IgnoreWhitespace=true;
settings.IgnoreComments=true;
XmlReader xmlIn=XmlReader.Create(路径、设置);
如果(xmlIn.ReadToDescendant(“学生”))
{
做
{
学生=新生();
xmlIn.ReadStartElement(“学生”);
student.FirstName=xmlIn.ReadElementContentAsString();
student.LastName=xmlIn.ReadElementContentAsString();
student.Email=xmlIn.ReadElementContentAsString();
student.AssessmentGrade=xmlIn.ReadElementContentAsInt();
student.AssignmentGrade=xmlIn.ReadElementContentAsInt();
添加(学生);
}而(xmlIn.ReadToNextSibling(“学生”);
}
else if(xmlIn.ReadToDescendant(“教师”))
{
做
{
教师=新教师();
xmlIn.ReadStartElement(“教师”);
teacher.FirstName=xmlIn.ReadElementContentAsString();
teacher.LastName=xmlIn.ReadElementContentAsString();
teacher.Email=xmlIn.ReadElementContentAsString();
teacher.RoomNumber=xmlIn.ReadElementContentAsInt();
添加(教师);
}而(xmlIn.ReadToNextSibling(“教师”);
}
如果(xmlIn.ReadToDescendant(“人”))
{
做
{
Person=新人();
Xlin.ReadStartElement(“人员”);
person.FirstName=xmlIn.ReadElementContentAsString();
person.LastName=xmlIn.ReadElementContentAsString();
person.Email=xmlIn.ReadElementContentAsString();
人。添加(人);
}而(xmlIn.ReadToNextSibling(“人”);
}
xmlIn.Close();
返回人员;
}
} 

错误是否发生在PersonDB的“Student Student=(Student)person;”行?那么我该怎么办?我在XML文件中有三种类型的数据?我的意思是我有学生数据,老师
    public class PersonDB
{
    private const string path = @"..\..\Persons.xml";

    public static List<Person> GetPersons()
    {
        List<Person> persons = new List<Person>();

        XmlReaderSettings settings = new XmlReaderSettings();
        settings.IgnoreWhitespace = true;
        settings.IgnoreComments = true;

        XmlReader xmlIn = XmlReader.Create(path, settings);

        if (xmlIn.ReadToDescendant("Student"))
        {
            do
            {

                Student student = new Student();
                xmlIn.ReadStartElement("Student");
                student.FirstName = xmlIn.ReadElementContentAsString();
                student.LastName = xmlIn.ReadElementContentAsString();
                student.Email = xmlIn.ReadElementContentAsString();
                student.AssessmentGrade = xmlIn.ReadElementContentAsInt();
                student.AssignmentGrade = xmlIn.ReadElementContentAsInt();

                persons.Add(student);
            } while (xmlIn.ReadToNextSibling("Student"));

        }

        else if (xmlIn.ReadToDescendant("Teacher"))
        {
            do
            {

                Teacher teacher = new Teacher();
                xmlIn.ReadStartElement("Teacher");
                teacher.FirstName = xmlIn.ReadElementContentAsString();
                teacher.LastName = xmlIn.ReadElementContentAsString();
                teacher.Email = xmlIn.ReadElementContentAsString();
                teacher.RoomNumber = xmlIn.ReadElementContentAsInt();

                persons.Add(teacher);
            } while (xmlIn.ReadToNextSibling("Teacher"));
        }

        if (xmlIn.ReadToDescendant("Person"))
        {
            do
            {
                Person person = new Person();

                xmlIn.ReadStartElement("Person");
                person.FirstName = xmlIn.ReadElementContentAsString();
                person.LastName = xmlIn.ReadElementContentAsString();
                person.Email = xmlIn.ReadElementContentAsString();

                persons.Add(person);
            } while (xmlIn.ReadToNextSibling("Person"));
        }


        xmlIn.Close();

        return persons;
    }
   }