gpt4 book ai didi

c# - 反序列化 XML 元素数组

转载 作者:太空狗 更新时间:2023-10-29 23:17:55 29 4
gpt4 key购买 nike

所以,反序列化正在工作,但是我有一些这样的 xml:

<File>
<Stuff>stuff</Stuff>
<Devices>
<Device Type="1">
<Number>1</Number>
</Device>
<Device Type="2">
<Number>2</Number>
</Device>
</Devices>
</File>

当它到达设备数组时...第一个设备是唯一填充到对象中的设备。以下是类(class):

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

同样,只有第一个 Device 被填充,我玩过 XmlArray 和 XmlArrayItem 但是它们都没有给我第一个值。有什么建议吗?

最佳答案

你一定是在别的地方做错了什么。仅使用 XML 的 Devices 部分:

  <Devices>
<Device Type="1">
<Number>1</Number>
</Device>
<Device Type="2">
<Number>2</Number>
</Device>
</Devices>

我能够成功反序列化具有多个 DeviceElements 子级的 Devices 类实例,使用与您在上一个问题中使用的类似代码给出您上面的类:

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

编辑:

使用完整的 XML:

<File>
<Stuff>stuff</Stuff>
<Devices>
<Device Type="1">
<Number>1</Number>
</Device>
<Device Type="2">
<Number>2</Number>
</Device>
</Devices>
</File>

这对我来说成功反序列化了:

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

附带说明 - 您可能不应该将您的类命名为与 .NET 框架中已有的类相同的名称 (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);

关于c# - 反序列化 XML 元素数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7032553/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com