2011-05-15 4 views
2

J'essaie de désérialiser un fichier XML dans une classe. Le fichier XML ressemble à ceci:Exception interne de désérialisation XML

<?xml version="1.0" encoding="utf-8"?> 
<locations> 
<location id="0"> 
    <name>park</name> 
    <temperature>5</temperature> 
    <wind>26</wind> 
    <weather_text_SI>sunny</weather_text_SI> 
    <visibility></visibility> 
    <latitude>46.4527</latitude> 
    <longitude>15.334</longitude> 
    <elevation>1517</elevation> 
</location> 
</locations> 

La classe que je veux désérialiser à est:

[XmlRootAttribute("locations")] 
public class SnowPark 
{ 
    public SnowPark() 
    { 
    } 

    private int id; 
    [XmlAttribute("id")] 
    public int Id 
    { 
     get { return id; } 
     set { id = value; } 
    } 

    private string name; 
    [XmlElement("name")] 
    public string Name 
    { 
     get { return name; } 
     set { name = value; } 
    } 

    private int temperature; 
    [XmlElement("temperature")] 
    public int Temperature 
    { 
     get { return temperature; } 
     set { temperature = value; } 
    } 

    private int wind; 
    [XmlElement("wind")] 
    public int Wind 
    { 
     get { return wind; } 
     set { wind = value; } 
    } 

    private string weatherText; 
    [XmlElement("weather_text_SI")] 
    public string WeatherText 
    { 
     get { return weatherText; } 
     set { weatherText = value; } 
    } 

    private double latitude; 
    [XmlElement("latitude")] 
    public double Latitude 
    { 
     get { return latitude; } 
     set { latitude = value; } 
    } 

    private double longitude; 
    [XmlElement("longitude")] 
    public double Longitude 
    { 
     get { return longitude; } 
     set { longitude = value; } 
    } 

    private int elevation; 
    [XmlElement("elevation")] 
    public int Elevation 
    { 
     get { return elevation; } 
     set { elevation = value; } 
    } 
} 

J'essaie de désérialiser le fichier XML

XmlSerializer deserializer = new XmlSerializer(typeof(List<SnowPark>)); 
TextReader textReader = new StreamReader(@"file.xml"); 
List<SnowPark> parks; 
parkss = (List<SnowPark>)deserializer.Deserialize(textReader); 
textReader.Close(); 

Cependant, je reçois un exception:

There is an error in XML document (2, 2). 

et un n exception interne:

<locations xmlns=''> was not expected. 

Pas de chance de trouver la solution jusqu'à présent. Aide appréciée.

Répondre

4

Le XmlRootAttribute ne s'applique pas car vous numérotez une liste de puis, pas un élément individuel; Cela signifie également que votre XML est une couche plus loin que nécessaire.

OMI, votre option la plus facile est ici:

[XmlRoot("locations")] 
public class Locations 
{ 
    [XmlElement("location")] 
    public List<SnowPark> Parks {get;set;} 
} 

et désérialiser un objet Emplacements, en utilisant typeof(Locations) à initialiseurs XmlSerializer