private void WriteValue(XmlTextWriter writer, Property property, EasyProperties.TypeCollection types) { object val = property.Value; if (val == null) { return; } Type type = val.GetType(); writer.WriteAttributeString(XN_AT_TYPE, types.GetTypeId(type).ToString()); if (val is Array || val is ArrayList) { // writer.WriteStartElement(XN_ARRAY); foreach (object o in (IEnumerable)val) { // writer.WriteStartElement(XN_ELEMENT); writer.WriteStartElement(XN_ARRAY); this.WriteValue(writer, o); writer.WriteEndElement(); // writer.WriteEndElement(); } // writer.WriteEndElement(); } else { this.WriteValue(writer, val); } }
private void WriteChildNodes(XmlTextWriter writer, EasyProperties.TypeCollection types) { EasyPropertiesNode[] childProperties = this.GetChildProperties(); foreach (EasyPropertiesNode ps in childProperties) { ps.Write(writer, types); } }
internal void Write(XmlTextWriter writer, EasyProperties.TypeCollection types) { writer.WriteStartElement(XN_PROPERTY); writer.WriteAttributeString(XN_AT_NAME, this.Name); this.WriteValues(writer, types); this.WriteChildNodes(writer, types); writer.WriteEndElement(); }
private void WriteValues(XmlTextWriter writer, EasyProperties.TypeCollection types) { Property[] values = this.GetValues(); if (values.Length == 0) { return; } writer.WriteStartElement(XN_VALUES); foreach (Property value in values) { writer.WriteStartElement(XN_ELEMENT); writer.WriteAttributeString(XN_AT_NAME, value.Name); this.WriteValue(writer, value, types); writer.WriteEndElement(); } writer.WriteEndElement(); }
private void ReadValues(XmlTextReader reader, EasyProperties.TypeCollection types) { if (reader.IsEmptyElement) { return; } while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.EndElement: if (reader.LocalName == XN_VALUES) { return; } break; case XmlNodeType.Element: if (reader.LocalName == XN_ELEMENT) { string pname = reader.GetAttribute(XN_AT_NAME); int typeIndex = Convert.ToInt32(reader.GetAttribute(XN_AT_TYPE)); Type type = types[typeIndex]; object value = null; if (type.IsArray) { value = this.ReadArray(reader, type); } else { value = this.ReadValue(reader, type); } this.SetValue <object>(pname, value); } break; } } }
internal void Read(XmlTextReader reader, EasyProperties.TypeCollection types) { if (reader.IsEmptyElement) { return; } while (reader.Read()) { switch (reader.NodeType) { case XmlNodeType.EndElement: if (reader.LocalName == XN_PROPERTY) { return; } break; case XmlNodeType.Element: string propertyName = reader.LocalName; if (propertyName == XN_PROPERTY) { string name = reader.GetAttribute(XN_AT_NAME); if (name == EasyProperties.PXmlRootPropertiesName && this is EasyProperties) { continue; } EasyPropertiesNode ps = new EasyPropertiesNode(name, this); _childProperties.Add(new PropertyKey(name), ps); ps.Read(reader, types); } else if (propertyName == XN_VALUES) { this.ReadValues(reader, types); } break; } } }