Stackoverflowには、このテーマに関してすでにいくつかの質問があることは知っていますが、タグを繰り返すことについての答えはまだ見つかりませんでした。私がそのような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; }
}
考えられるすべての組み合わせを定義せずにアイテムを再帰的にループする答えを得る方法はありますか?
ブロックにブロックのリストとボタンのリストを、ボタンにブロックのリストとブロックのリストを与えたくありません。そして、新しいタグごとにオプションを追加します。
デシリアライズせずにXPathを使用することもできますが、自分で調べないと、親/子に関する情報がわかりません。これについて何か助けはありますか?