所以,反序列化正在工作,但是我有一些这样的xml:
<File>
<Stuff>stuff</Stuff>
<Devices>
<Device Type="1">
<Number>1</Number>
</Device>
<Device Type="2">
<Number>2</Number>
</Device>
</Devices>
</File>
Run Code Online (Sandbox Code Playgroud)
当到达设备阵列时...第一个设备是唯一填充到对象中的设备。这些是类:
XmlSerializer deserializer;
XmlRootAttribute xRoot = new XmlRootAttribute();
FileStream stream = new FileStream(CONFIG_PATH, FileMode.Open);
XmlReader reader = new XmlTextReader(stream);
// Details configuration area.
xRoot.ElementName = "File";
xRoot.IsNullable = true;
deserializer = new XmlSerializer(typeof(File), xRoot);
Configuration = (File)deserializer.Deserialize(reader);
[Serializable()]
[XmlRoot(ElementName = "File", IsNullable = true)]
public sealed class File
{
[XmlElement("Devices")]
public Devices Devices { get; set; }
}
// <summary>
/// Configuration device elements.
/// </summary>
[Serializable()]
[XmlRoot("Devices", IsNullable = true)]
public sealed class Devices
{
[XmlElement("Device")]
public DeviceElements[] DeviceElements { get; set; }
}
/// <summary>
/// Configuration Devices.
/// </summary>
[Serializable()]
[XmlRoot("Device", IsNullable = true)]
public sealed class DeviceElements
{
[XmlAttribute("Type")]
public string DeviceType { get; set; }
[XmlElement("Number")]
public int DeviceNumber { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
同样,只有第一个设备被填充,我玩过XmlArray和XmlArrayItem,但是它们都没有给我第一个值。有什么建议么?
您必须在另一个地方做错了。仅使用DevicesXML 的一部分:
<Devices>
<Device Type="1">
<Number>1</Number>
</Device>
<Device Type="2">
<Number>2</Number>
</Device>
</Devices>
Run Code Online (Sandbox Code Playgroud)
对于上面给出的类,我能够使用与上一个问题中使用的相似的代码成功地反序列化Devices具有多个DeviceElements子级的类实例。
FileStream stream = new FileStream("test.xml", FileMode.Open);
XmlReader reader = new XmlTextReader(stream);
XmlSerializer deserializer = new XmlSerializer(typeof(Devices));
var devicesResult = (Devices)deserializer.Deserialize(reader);
Run Code Online (Sandbox Code Playgroud)
编辑:
使用完整的XML:
<File>
<Stuff>stuff</Stuff>
<Devices>
<Device Type="1">
<Number>1</Number>
</Device>
<Device Type="2">
<Number>2</Number>
</Device>
</Devices>
</File>
Run Code Online (Sandbox Code Playgroud)
这成功地反序列化了我:
FileStream stream = new FileStream("test.xml", FileMode.Open);
XmlReader reader = new XmlTextReader(stream);
XmlRootAttribute xRoot = new XmlRootAttribute();
xRoot.ElementName = "File";
xRoot.IsNullable = true;
XmlSerializer deserializer = new XmlSerializer(typeof(File), xRoot);
var fileResult = (File)deserializer.Deserialize(reader);
Run Code Online (Sandbox Code Playgroud)
附带说明一下-您可能不应该将您的类命名为与.NET Framework(System.IO.File)中相同的名称,同样在上述代码示例中,也不需要设置Xml根目录,因为无论如何您都使用相同的名称,只需将其省略:
FileStream stream = new FileStream("test.xml", FileMode.Open);
XmlReader reader = new XmlTextReader(stream);
XmlSerializer deserializer = new XmlSerializer(typeof(File));
var fileResult = (File)deserializer.Deserialize(reader);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11053 次 |
| 最近记录: |