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; }
}
我正在使用 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; }
}