Ich denke, da bist du mit LINQ 2
XML schneller am Ziel und brauchst vor allem kein "Zwischen-Model" des Graphen. So etwa:
Code:
class Node
{
public IList<Edge> Edges { get; private set; }
public string Description { get; set; }
public Node()
{
Edges = new List<Edge>();
}
}
class Edge
{
//public Node Source { get; set; } //?
public Node Target { get; set; }
...
}
var root = XElement.Load(...);
var nodes = new Dictionary<int, Node>();
foreach (XElement nodeEl in root.Elements("node"))
nodes.Add((int)nodeEl.Element("id"), new Node {
Description = nodeEl.Element("description").Value
});
foreach (XElement edgeEl in root.Elements("edge"))
nodes[(int)edgeEl.Element("source_id")].Edges.Add(new Edge {
Target = nodes[(int)edgeEl.Element("source_id")],
...
};