2012-02-28 24 views
5

¿Cómo puedo deserializar este xml usando Linq? que quieren crear List<Step>¿Cómo deserializar xml usando Linq?

<MySteps> 
    <Step> 
    <ID>1</ID> 
    <Name>Step 1</Name> 
    <Description>Step 1 Description</Description> 
    </Step> 
    <Step> 
    <ID>2</ID> 
    <Name>Step 2</Name> 
    <Description>Step 2 Description</Description> 
    </Step> 
    <Step> 
    <ID>3</ID> 
    <Name>Step 3</Name> 
    <Description>Step 3 Description</Description> 
    </Step> 
    <Step> 
    <ID>4</ID> 
    <Name>Step 4</Name> 
    <Description>Step 4 Description</Description> 
    </Step> 
</MySteps> 
+0

Una lista de qué? ¿Has definido tu propia clase de lista? ¿Qué has intentado hasta ahora? –

+0

¿Alguna razón para usar no solo el uso de 'System.Xml.Serialization.XmlSerializer'? –

+0

Estoy tratando de usar el Linq a xml sin éxito – user829174

Respuesta

12
string xml = @"<MySteps> 
       <Step> 
        <ID>1</ID> 
        <Name>Step 1</Name> 
        <Description>Step 1 Description</Description> 
       </Step> 
       <Step> 
        <ID>2</ID> 
        <Name>Step 2</Name> 
        <Description>Step 2 Description</Description> 
       </Step> 
       <Step> 
        <ID>3</ID> 
        <Name>Step 3</Name> 
        <Description>Step 3 Description</Description> 
       </Step> 
       <Step> 
        <ID>4</ID> 
        <Name>Step 4</Name> 
        <Description>Step 4 Description</Description> 
       </Step> 
       </MySteps>"; 

XDocument doc = XDocument.Parse(xml); 

var mySteps = (from s in doc.Descendants("Step") 
       select new 
       { 
        Id = int.Parse(s.Element("ID").Value), 
        Name = s.Element("Name").Value, 
        Description = s.Element("Description").Value 
       }).ToList(); 

He aquí cómo usted lo haría utilizando LINQ. Obviamente, deberías estar haciendo tu propia comprobación de errores.

+0

Estoy haciendo algo similar pero este código solo devuelve el primer elemento ... ¿no una lista? – cbutler

4

LINQ-to-XML es su respuesta.

List<Step> steps = (from step in xml.Elements("Step") 
        select new Step() 
        { 
         Id = (int)step.Element("Id"), 
         Name = (string)step.Element("Name"), 
         Description = (string)step.Element("Description") 
        }).ToList(); 

Y un poco acerca de hacer las conversiones de XML desde Scott Hanselman

0

Mostrando las respuestas anteriores en sintaxis del método de LINQ

Descendientes:

var steps = xml.Descendants("Step").Select(step => new 
{ 
    Id = (int)step.Element("ID"), 
    Name = step.Element("Name").Value, 
    Description = step.Element("Description").Value 
}); 

elementos:

var steps2 = xml.Element("MySteps").Elements("Step").Select(step => new 
{ 
    Id = (int)step.Element("ID"), 
    Name = step.Element("Name").Value, 
    Description = step.Element("Description").Value 
}); 
Cuestiones relacionadas