public void WriteXml(XmlWriter writer) { TypeXmlAttributes xmlInfo_graph = TypeDescriptorTools.GetXmlInfo(typeof(DirectedGraph)); TypeXmlAttributes xmlInfo_node = TypeDescriptorTools.GetXmlInfo(typeof(Node)); TypeXmlAttributes xmlInfo_link = TypeDescriptorTools.GetXmlInfo(typeof(Link)); TypeXmlAttributes xmlInfo_category = TypeDescriptorTools.GetXmlInfo(typeof(Category)); TypeXmlAttributes xmlInfo_property = TypeDescriptorTools.GetXmlInfo(typeof(Property)); // writer.WriteStartDocument(); //writer.WriteStartElement(nameof(DirectedGraph)); this.WriteElementAttributes(writer, xmlInfo_graph); writer.WriteStartElement(nameof(Nodes)); foreach (Node n in Nodes) { n.WriteXml(writer, xmlInfo_node); } writer.WriteEndElement(); writer.WriteStartElement(nameof(Links)); foreach (Link n in Links) { n.WriteXml(writer, xmlInfo_link); } writer.WriteEndElement(); writer.WriteStartElement(nameof(Categories)); foreach (Category n in Categories) { n.WriteXml(writer, xmlInfo_category); } writer.WriteEndElement(); writer.WriteStartElement(nameof(Properties)); foreach (Property n in PropertyDeclaration) { n.WriteXml(writer, xmlInfo_property); } writer.WriteEndElement(); // writer.WriteEndElement(); // writer.WriteEndDocument(); }
public static void ReadElementAttributes(this IElementWithProporties graphElement, XmlReader reader, TypeXmlAttributes xmlInfo) { reader.MoveToFirstAttribute(); do { String attName = reader.Name; var p_info = xmlInfo.Get(attName); Object att_value = null; if (reader.ReadAttributeValue()) { att_value = reader.Value; } if (att_value != null) { if (p_info == null) { graphElement.Properties.Add(attName, att_value.toStringSafe()); } else { Object att_value_typed = imbTypeExtensions.imbConvertValueSafe(att_value, p_info.Property.PropertyType); p_info.Property.SetValue(graphElement, att_value_typed, null); } } } while (reader.MoveToNextAttribute()); reader.MoveToElement(); }
public static void WriteXml(this IElementWithProporties graphElement, XmlWriter writer, TypeXmlAttributes xmlInfo) { writer.WriteStartElement(xmlInfo.Root.ElementName); WriteElementAttributes(graphElement, writer, xmlInfo); writer.WriteEndElement(); }
public static void WriteElementAttributes(this IElementWithProporties graphElement, XmlWriter writer, TypeXmlAttributes xmlInfo) { foreach (PropertyInfoXmlAttributes property in xmlInfo) { if (!property.Ignore) { if (property.IsAttribute) { String v = property.Property.GetValue(graphElement, null).toStringSafe(); if (!v.isNullOrEmpty()) { writer.WriteAttributeString(property.ElementName, v); } } } } foreach (var prop in graphElement.Properties) { if (!prop.value.isNullOrEmpty()) { writer.WriteAttributeString(prop.key, prop.value); } } }
public static void ReadXml(this IElementWithProporties graphElement, XmlReader reader, TypeXmlAttributes xmlInfo) { //reader.ReadStartElement(xmlInfo.Root.ElementName); ReadElementAttributes(graphElement, reader, xmlInfo); //reader.ReadEndElement(); }
public void ReadXml(XmlReader reader) { TypeXmlAttributes xmlInfo_graph = TypeDescriptorTools.GetXmlInfo(typeof(DirectedGraph)); TypeXmlAttributes xmlInfo_node = TypeDescriptorTools.GetXmlInfo(typeof(Node)); TypeXmlAttributes xmlInfo_link = TypeDescriptorTools.GetXmlInfo(typeof(Link)); TypeXmlAttributes xmlInfo_category = TypeDescriptorTools.GetXmlInfo(typeof(Category)); TypeXmlAttributes xmlInfo_property = TypeDescriptorTools.GetXmlInfo(typeof(Property)); DirectedGraphXmlExtensions.ReadElementAttributes(this, reader, xmlInfo_graph); reader.Read(); while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.Element: switch (reader.Name) { case nameof(Node): var tmpNode = new Node(); tmpNode.ReadXml(reader, xmlInfo_node); Nodes.Add(tmpNode); break; case nameof(Link): var newLink = new Link(); newLink.ReadXml(reader, xmlInfo_link); Links.Add(newLink); break; case nameof(Category): var newCategory = new Category(); newCategory.ReadXml(reader, xmlInfo_category); Categories.Add(newCategory); break; case nameof(Property): var newProperty = new Property(); newProperty.ReadXml(reader, xmlInfo_property); PropertyDeclaration.Add(newProperty); break; //case nameof(Nodes): // do // { // var newNode = new Node(); // newNode.ReadXml(reader, xmlInfo_node); // Nodes.Add(newNode); // } while (reader.ReadToNextSibling(nameof(Node))); // break; //case nameof(Links): // do // { // var newLink = new Link(); // newLink.ReadXml(reader, xmlInfo_link); // Links.Add(newLink); // } while (reader.ReadToNextSibling(nameof(Link))); // reader.ReadEndElement(); // break; //case nameof(Categories): // do // { // var newCategory = new Category(); // newCategory.ReadXml(reader, xmlInfo_category); // Categories.Add(newCategory); // } while (reader.ReadToNextSibling(nameof(Category))); // break; //case nameof(Properties): // do // { // var newProperty = new Property(); // newProperty.ReadXml(reader, xmlInfo_property); // PropertyDeclaration.Add(newProperty); // } while (reader.ReadToNextSibling(nameof(Property))); // break; default: break; } break; default: case XmlNodeType.Text: break; case XmlNodeType.CDATA: break; case XmlNodeType.ProcessingInstruction: break; case XmlNodeType.Comment: break; case XmlNodeType.XmlDeclaration: break; case XmlNodeType.Document: break; case XmlNodeType.DocumentType: break; case XmlNodeType.EntityReference: break; case XmlNodeType.EndElement: break; } } //reader.ReadStartElement(nameof(Nodes)); //reader.ReadEndElement(); //reader.ReadStartElement(nameof(Links)); //reader. //reader.ReadStartElement(nameof(Categories)); //reader.ReadEndElement(); //reader.ReadStartElement(nameof(Properties)); //reader.ReadEndElement(); }