Xml 反序列化不会为 Xml 数组创建任何元素

Xml Deserialization does not create any Elements for XmlArray

我正在使用 WPF 开发一个项目,想要反序列化 XML 具有如下结构的文件:

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

这些是我的 类

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

这是我的代码

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();

但我在

得到IndexOutOfRangeException
Trace.WriteLine(softwareUpdate.einträge.Eintrag[1].DeviceType);

但是数组Eintrag应该有四个元素。所以问题可能出在代码或 类 中的某处,但我看不到它。

看起来您的数据模型中有错字 class。这是 Eintrage 而不是 Einträge

public class Einträge
{
    [XmlArray("Eintrag")]
    [XmlArrayItem("Einträge", typeof(Eintrag))]
    public Eintrag[] eintrag { get; set; }
}

无论如何我建议使用不带 'ä' 的符号,更好的是 'ae'.

数据模型类哪里错了。

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