2013-04-30 6 views
8

ich XML zu konvertieren Ich versuche auf Verfahren zur ListeKonvertieren eines XML Generic Liste

<School> 
    <Student> 
    <Id>2</Id> 
    <Name>dummy</Name> 
    <Section>12</Section> 
    </Student> 
    <Student> 
    <Id>3</Id> 
    <Name>dummy</Name> 
    <Section>11</Section> 
    </Student> 
</School> 

Ich habe versucht, einige Dinge mit LINQ und bin nicht so klar.

dox.Descendants("Student").Select(d=>d.Value).ToList(); 

Am bekommen Anzahl 2, aber Werte sind wie 2dummy12 3dummy11

Ist es möglich, die oben XML auf eine generische Liste der Typ Student zu umwandeln, die ID, Name und Abschnitt Eigenschaften hat?

Was ist der beste Weg, ich dies umsetzen kann?

+2

Ich denke, dieser Artikel wäre nützlich [XML in Objekt mit LINQ konvertieren] (http://www.codeproject.com/Tips/366993/Convert-XML-to-Object-using-LINQ) –

Antwort

11

Sie können einen anonymen Typ erstellen

var studentLst=dox.Descendants("Student").Select(d=> 
new{ 
    id=d.Element("Id").Value, 
    Name=d.Element("Name").Value, 
    Section=d.Element("Section").Value 
    }).ToList(); 

Diese Liste anonymer Typ erstellt ..


Wenn Sie

eine Liste der Studententyp
class Student{public int id;public string name,string section} 

List<Student> studentLst=dox.Descendants("Student").Select(d=> 
new Student{ 
    id=d.Element("Id").Value, 
    name=d.Element("Name").Value, 
    section=d.Element("Section").Value 
    }).ToList(); 
+0

Das funktioniert perfekt. Wie konvertiere ich das in die Liste der Studenten? – user2067567

+0

@ user2067567 überprüfen Sie die Bearbeitung – Anirudha

+0

Danke @Anirudh – user2067567

1
erstellen

oder Sie können einen Klassenaufruf Student erstellen mit ID, Name und Abschnitt als Eigenschaften und tun:

var students = from student in dox.Descendants("Student") 
      select new Student 
      { 
       id=d.Element("Id").Value, 
       Name=d.Element("Name").Value, 
       Section=d.Element("Section").Value 
      }).ToList(); 
12

Ich sehe, dass Sie eine Antwort akzeptiert haben. Aber ich möchte nur einen anderen Weg zeigen, den ich mag. Zuerst müssen Sie Klassen wie folgt:

public class Student 
{ 
    [XmlElement("Id")] 
    public int StudentID { get; set; } 

    [XmlElement("Name")] 
    public string StudentName { get; set; } 

    [XmlElement("Section")] 
    public int Section { get; set; } 
} 

[XmlRoot("School")] 
public class School 
{ 
    [XmlElement("Student", typeof(Student))] 
    public List<Student> StudentList { get; set; } 
} 

Dann können Sie diese xml deserialisieren:

string path = //path to xml file 

using (StreamReader reader = new StreamReader(path)) 
{ 
    XmlSerializer serializer = new XmlSerializer(typeof(School)); 
    School school = (School)serializer.Deserialize(reader); 
} 

Hoffe, dass es nützlich sein wird.