Try this:
XDocument document = new XDocument();
SaveLightXml(diagram, document);
diagram.ClearAll();
LoadLightXml(diagram, document);
private void SaveLightXml(Diagram diagram, XDocument document)
{
XmlPersistContext context = new XmlPersistContext(diagram, document);
XElement root = new XElement("Diagram");
document.Add(root);
XElement nodesEl = context.AddChildElement("Nodes", root);
foreach (DiagramNode node in diagram.Nodes)
{
ShapeNode shapeNode = node as ShapeNode;
XElement nodeEl = context.AddChildElement("Node", nodesEl);
nodeEl.SetAttributeValue("Id", shapeNode.ZIndex);
context.WriteRectangleF(shapeNode.Bounds, "Bounds", nodeEl);
context.WriteString(shapeNode.Text, "Text", nodeEl);
}
XElement linksEl = context.AddChildElement("Links", root);
foreach (DiagramLink link in diagram.Links)
{
XElement linkEl = context.AddChildElement("Link", linksEl);
context.WriteInt(link.Destination.ZIndex, "Destination", linkEl);
context.WriteInt(link.Origin.ZIndex, "Origin", linkEl);
}
}
private void LoadLightXml(Diagram diagram, XDocument document)
{
XmlPersistContext context = new XmlPersistContext(diagram, document);
XElement root = document.Root;
Dictionary<int, ShapeNode> dictionary = new Dictionary<int, ShapeNode>();
XElement nodesEl = root.Element("Nodes");
var nodeElements = nodesEl.Elements("Node");
foreach (XElement nodeEl in nodeElements)
{
ShapeNode node = diagram.Factory.CreateShapeNode(10, 10, 10, 10);
int id = int.Parse(nodeEl.Attribute("Id").Value);
node.Bounds = context.ReadRectangleF("Bounds", nodeEl);
node.Text = context.ReadString("Text", nodeEl);
dictionary.Add(id, node);
}
XElement linksEl = root.Element("Links");
var linkElements = linksEl.Elements("Link");
foreach (XElement linkEl in linkElements)
{
int dest = context.ReadInt("Destination", linkEl);
int orig = context.ReadInt("Origin", linkEl);
ShapeNode destNode = dictionary[dest];
ShapeNode origNode = dictionary[orig];
diagram.Factory.CreateDiagramLink(origNode, destNode);
}
}
I hope that helps,
Stoyan