2017-09-18 12 views
0

J'ai désérialisé le travail avec un seul élément. Mais quand j'ai un tableau d'éléments xml mon code ne fonctionne pasDésérialise un tableau XML

Voici mon code.

XML:

<data> 
    <cars> 
     <body> 
      <color>blue<color> 
      <type>sedan</type> 
     </body> 
     <details> 
      <year>2016</year> 
      <make>Infiniti</make> 
     </details> 
    </cars> 
    <cars> 
     <body> 
      <color>white<color> 
      <type>SUV</type> 
     </body> 
     <details> 
      <year>2016</year> 
      <make>Lexus</make> 
     </details> 
    </cars> 
</data> 

Dto

[XmlRoot("cars")] 
public class CarDetails 
{ 
     [XmlElement("body")] 
     public Body BodyList { get; set; } 

     [XmlElement("details")] 
     public DetailsList details { get; set; } 
} 

public class Body 
     { 
      public string Color { get; set; } 
      public string Type { get; set; } 
     } 

public class DetailsList 
     { 
      public int Year { get; set; } 
      public string Make { get; set; } 
     } 

Ci-dessous le code désérialisation:

CarDetails[] details; 
XmlSerializer serializer = new XmlSerializer(typeof(CarDetails[])); 
      using (TextReader reader = new StringReader(output)) 
      { 
       details= (CarDetails[])serializer.Deserialize(reader); 
      } 

S'il vous plaît aidez-moi comment désérialiser tableau XML

+0

Quelle erreur obtenez-vous? – mech

Répondre

0

d'abord , votre XML est invali ré.

<color>blue<color> 

vous avez oublié de fermer la couleur ici. Deuxièmement, il vaut mieux ne pas le faire sur vous-même. Mieux vaut le faire en utilisant quelques outils. Comme online XML to C# generator. Vous pouvez trouver des similaires pour JSON. Dans mon cas, il a donné ce résultat (voir la classe de données):

[XmlRoot(ElementName="body")] 
public class Body { 
    [XmlElement(ElementName="color")] 
    public string Color { get; set; } 
    [XmlElement(ElementName="type")] 
    public string Type { get; set; } 
} 

[XmlRoot(ElementName="details")] 
public class Details { 
    [XmlElement(ElementName="year")] 
    public string Year { get; set; } 
    [XmlElement(ElementName="make")] 
    public string Make { get; set; } 
} 

[XmlRoot(ElementName="cars")] 
public class Cars { 
    [XmlElement(ElementName="body")] 
    public Body Body { get; set; } 
    [XmlElement(ElementName="details")] 
    public Details Details { get; set; } 
} 

[XmlRoot(ElementName="data")] 
public class Data { 
    [XmlElement(ElementName="cars")] 
    public List<Cars> Cars { get; set; } 
}