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;
                }
            }
        }