I am working on a project using WPF and want to Deserialize a XML File with structure like this:
<SoftwareUpdate>
<Einträge>
<Eintrag>
<Device></Device>
<language1>
<Information>
</language1>
<language2>
<Information>
</language2>
</Eintrag>
<Eintrag>
<Device></Device>
<language1>
<Information>
</language1>
<language2>
<Information>
</language2>
</Eintrag>
<Eintrag>
<Device></Device>
<language1>
<Information>
</language1>
<language2>
<Information>
</language2>
</Eintrag>
<Eintrag>
<Device></Device>
<language1>
<Information>
</language1>
<language2>
<Information>
</language2>
</Eintrag>
<Einträge>
<SoftwareUpdate>
these are my classes
public class SoftwareUpdate
{
[XmlElement("Einträge")]
public Einträge einträge { get; set; }
}
public class Einträge
{
[XmlArray("Eintrag")]
[XmlArrayItem("Eintrage", typeof(Eintrag))]
public Eintrag[] eintrag { get; set; }
}
public class Eintrag
{
public String Device { get; set; }
public Language language1 { get; set; }
public Language language2 { get; set; }
}
public class Language
{
public String Information { get; set; }
}
and this is my Code
SoftwareUpdate softwareUpdate = null;
string path = @"C:\XML-File\TestFile.xml";
XmlSerializer serializer = new XmlSerializer(typeof(SoftwareUpdate));
StreamReader reader = new StreamReader(path);
softwareUpdate = (SoftwareUpdate)serializer.Deserialize(reader);
Trace.WriteLine(softwareUpdate.einträge.Eintrag[1].DeviceType);
reader.Close();
But i get IndexOutOfRangeException
at
Trace.WriteLine(softwareUpdate.einträge.Eintrag[1].DeviceType);
But the Array Eintrag
should have four elements. So the problem probably lies somewhere in the code or in the classes but I can't see it.
The data model classes where wrong.
public class SoftwareUpdate
{
[XmlArray("Einträge")]
[XmlArrayItem("Eintrag", typeof(Eintrag))]
public Eintrag[] Eintrag { get; set; }
}
public class Eintrag
{
public String Device { get; set; }
public Language language1 { get; set; }
public Language language2 { get; set; }
}
public class Language
{
public String Information { get; set; }
}