【问题标题】:Xml Deserialization does not create any Elements for XmlArrayXml 反序列化不会为 XmlArray 创建任何元素
【发布时间】:2021-08-17 15:21:35
【问题描述】:

我正在开发一个使用 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 应该有四个元素。所以问题可能出在代码或类的某个地方,但我看不到。

【问题讨论】:

  • ä 是 XML 元素名称中的有效字符吗?
  • 您的示例 XML 无效,您的示例代码甚至无法编译...

标签: c# wpf deserialization indexoutofrangeexception


【解决方案1】:

看起来就像您的数据模型类中的错字。它是 Eintrage 而不是 Einträge

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

无论如何,我建议使用没有 'ä' 的符号,最好是 'ae'。

【讨论】:

    【解决方案2】:

    错误的数据模型类。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      • 2011-06-24
      • 2010-11-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多