2013-04-30 16 views
8

Próbuję przekonwertować XML do listyKonwersja XML do rodzajowego listy

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

Próbowałem kilka rzeczy przy użyciu LINQ i nie jestem tak jasne w postępowaniu.

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

Dostaję count 2, ale wartości są jak 2dummy12 3dummy11

Czy to możliwe, aby przekształcić powyższy XML do rodzajowego listy typu Student, który ma id, nazwisko i właściwości sekcja?

Jaki jest najlepszy sposób, w jaki mogę to wdrożyć?

+2

Myślę, że ten artykuł byłby przydatny [Konwersja XML do obiektu za pomocą LINQ] (http://www.codeproject.com/Tips/366993/Convert-XML-to-Object-using-LINQ) –

Odpowiedz

11

Można utworzyć typ anonimowy

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

ten tworzy listę anonimowych typu ..


Jeśli chcesz utworzyć listę typu Student

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

To działa idealnie. Jak mogę to zmienić na listę studentów? – user2067567

+0

@ user2067567 sprawdź edytuj – Anirudha

+0

Dzięki @Airirudh – user2067567

1

lub możesz utworzyć połączenie klasowe Student z identyfikatorem, nazwą i sekcją jako właściwościami i wykonaj:

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

Widzę, że zaakceptowałeś odpowiedź. Ale chcę pokazać inną drogę, którą lubię. Najpierw musisz klasy jak poniżej:

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

Następnie można deserializować ten xml:

string path = //path to xml file 

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

nadzieję, że będzie pomocny.