2013-04-30 8 views
8

Sto cercando di convertire XML to ListConversione di un XML per elenco generico

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

ho provato alcune cose usando LINQ e non sono così chiari su procedere.

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

sono sempre conteggio 2, ma i valori sono come 2dummy12 3dummy11

E 'possibile convertire l'XML qui sopra per un generico elenco di tipo Student che ha Id, nome e le proprietà di sezione?

Qual è il modo migliore per implementarlo?

+2

Penso che questo articolo sarebbe utile [Converti XML in oggetto utilizzando LINQ] (http://www.codeproject.com/Tips/366993/Convert-XML-to-Object-using-LINQ) –

risposta

11

È possibile creare un tipo anonimo

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

Questo crea un elenco di tipo anonimo ..


Se si desidera creare un elenco di tipo 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

Ciò funziona perfettamente. Come faccio a convertirlo in Elenco di studenti? – user2067567

+0

@ user2067567 controlla la modifica – Anirudha

+0

Grazie @Anirudh – user2067567

1

oppure è possibile creare una chiamata di classe Studente con id, nome e sezione come proprietà e come:

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

Vedo che hai accettato una risposta. Ma voglio solo mostrare un altro modo che mi piace. In primo luogo è necessario classi come di seguito:

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

Quindi è possibile deserializzare questo 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); 
} 

spero che sia utile.