我知道有关于此主题Stackoverflow已经有几个问题,但我仍然找不到任何关于重复标签的答案。如果我有这样的XML结构:C#XML反序列化与缩进嵌套标签
<root>
<block>
<PositionX>100</PositionX>
<PositionY>100</PositionY>
<block>
<PositionX>10</PositionX>
<PositionY>15</PositionY>
<button>
</button>
</block>
<button>
</button>
</block>
</root>
上述结构可以在块内的块和块内的块。这是我目前使用的代码,它不允许嵌套项目:
反序列化:
public static GUI Deserialize(string filename)
{
GUI gui = null;
XmlSerializer serializer = new XmlSerializer(typeof(GUI));
StreamReader reader = new StreamReader(filename);
gui = (GUI)serializer.Deserialize(reader);
reader.Close();
return gui;
}
的根类:
[Serializable()]
[XmlRoot("View")]
public class GUI
{
[XmlArray("Blocks")]
[XmlArrayItem("Block", typeof(GUIBlock))]
public GUIBlock[] Blocks { get; set; }
}
块:
[Serializable()]
public class GUIBlock
{
[XmlElement("Name")]
public string Name { get; set; }
[XmlElement("Position")]
[XmlAttribute("X")]
public int PositionX { get; set; }
[XmlElement("Position")]
[XmlAttribute("Y")]
public int PositionY { get; set; }
[XmlElement("Width")]
public int Width { get; set; }
[XmlElement("Height")]
public int Height { get; set; }
[XmlElement("Background")]
public string Background { get; set; }
[XmlElement("Opacity")]
public int Opacity { get; set; }
// I also want to allow nested Blocks and Buttons in here, but I **dont** explicitly want to say:
[XmlArray("Blocks")]
[XmlArrayItem("Block", typeof(GUIBlock))]
public GUIBlock[] Blocks { get; set; }
}
有没有什么办法可以得到答案,递归地循环该项目而不定义每个可能的公司mbination?
我不想给出一个块列表和一个按钮列表以及一个按钮列表和一个块列表。并为每个新标签添加更多选项。
我也可以在没有反序列化的情况下使用XPath,但是如果我自己不探索它,我不知道关于父/子的信息。对此有帮助吗?
你是什么意思的“得到一个体面的答案”? – RainbowFish 2013-02-08 16:46:12
我们能否看到您想要反序列化的类文件? – 2013-02-08 16:50:30
期望的输出/结果是什么? – Tormod 2013-02-08 16:53:34