/// <summary> /// Load single node and it's child nodes if any. /// </summary> /// <param name="nodeToLoad">New instance of node that is populated with loaded data.</param> /// <param name="context">Provides deserialization context.</param> public static void LoadNode(Node nodeToLoad, NodeSerializationContext context) { XmlElement xmlNode = context.RefXmlElement; ElementSerializer.Deserialize(nodeToLoad, xmlNode); foreach(XmlNode xmlChild in xmlNode.ChildNodes) { XmlElement xmlElem = xmlChild as XmlElement; if(xmlElem == null) continue; if(xmlElem.Name==XmlNodeName) { Node node=new Node(); nodeToLoad.Nodes.Add(node); context.RefXmlElement = xmlElem; LoadNode(node, context); } else if(xmlElem.Name == XmlCellsName) { LoadCells(nodeToLoad, xmlElem); } else if(xmlElem.Name == XmlCustomName) { if(context.HasDeserializeNodeHandlers) { SerializeNodeEventArgs e = new SerializeNodeEventArgs(nodeToLoad, xmlNode, xmlElem); context.AdvTree.InvokeDeserializeNode(e); } } } context.RefXmlElement = xmlNode; }
/// <summary> /// Serializes Node and all child nodes to XmlElement object. /// </summary> /// <param name="node">Node to serialize.</param> /// <param name="context">Provides serialization context.</param> public static void Save(Node node, NodeSerializationContext context) { XmlElement parent = context.RefXmlElement; XmlElement xmlNode=parent.OwnerDocument.CreateElement(XmlNodeName); parent.AppendChild(xmlNode); ElementSerializer.Serialize(node, xmlNode); if(context.HasSerializeNodeHandlers) { XmlElement customXml = parent.OwnerDocument.CreateElement(XmlCustomName); SerializeNodeEventArgs e = new SerializeNodeEventArgs(node, xmlNode, customXml); context.AdvTree.InvokeSerializeNode(e); if (customXml.Attributes.Count > 0 || customXml.ChildNodes.Count > 0) xmlNode.AppendChild(customXml); } if(node.Cells.Count>1) { XmlElement xmlCells = parent.OwnerDocument.CreateElement(XmlCellsName); xmlNode.AppendChild(xmlCells); for(int i=1; i<node.Cells.Count;i++) { Cell cell=node.Cells[i]; XmlElement xmlCell= parent.OwnerDocument.CreateElement(XmlCellName); xmlCells.AppendChild(xmlCell); ElementSerializer.Serialize(cell, xmlCell); if(cell.ShouldSerializeImages()) { XmlElement xmlCellImages = parent.OwnerDocument.CreateElement(XmlCellImagesName); xmlCell.AppendChild(xmlCellImages); ElementSerializer.Serialize(cell.Images, xmlCellImages); } } } context.RefXmlElement = xmlNode; foreach(Node childNode in node.Nodes) { Save(childNode, context); } context.RefXmlElement = parent; }