Exemple #1
0
 public virtual void WriteXml(XmlWriter writer)
 {
     if (Name != null)
     {
         writer.WriteAttributeString(NameAttributeName, Name);
     }
     writer.WriteAttributeString(KeyTypeAttributeName, typeof(TKey).Name);
     writer.WriteAttributeString(CountAttributeName, this.Count.ToString());
     if (ExtraAttributeNames != null)
     {
         foreach (var key in ExtraAttributeNames)
         {
             string val;
             if (ExtraAttributes.ContainsKey(key) &&
                 (val = ExtraAttributes[key]) != null)
             {
                 writer.WriteAttributeString(key, val);
             }
         }
     }
     if (ExtraElementManager != null && ExtraElement != null)
     {
         ExtraElementManager.Serialize(writer, ExtraElement);
     }
     this.ToList().ForEach(item => {
         XmlHelper <TItem> .writeElement(writer, item);
     });
 }
Exemple #2
0
        public virtual void ReadXml(XmlReader reader)
        {
            Name = reader.GetAttribute(NameAttributeName);
            var keyTypeName = reader.GetAttribute(KeyTypeAttributeName);

            if (keyTypeName != typeof(TKey).Name)
            {
                throw new XmlException("KeyType mismatch");
            }
            if (ExtraAttributeNames != null)
            {
                ExtraAttributes = new Dictionary <string, string>();
                foreach (var key in ExtraAttributeNames)
                {
                    var value = reader.GetAttribute(key);
                    if (value != null)
                    {
                        ExtraAttributes[key] = value;
                    }
                }
            }
            this.Clear();
            if (ExtraElementManager != null)
            {
                reader.Read();
                while (reader.NodeType == XmlNodeType.Comment)
                {
                    reader.Skip();
                }
                if (reader.NodeType != XmlNodeType.EndElement)
                {
                    if (reader.Name == ExtraElementManager.Name)
                    {
                        ExtraElement = ExtraElementManager.Deserialize(reader.ReadSubtree());
                    }
                    else
                    {
                        var item = XmlHelper <TItem> .readElement(reader.ReadSubtree());

                        this.Add(item);
                    }
                }
            }
            while (reader.Read())
            {
                while (reader.NodeType == XmlNodeType.Comment)
                {
                    reader.Skip();
                }
                if (reader.NodeType != XmlNodeType.EndElement)
                {
                    var item = XmlHelper <TItem> .readElement(reader.ReadSubtree());

                    this.Add(item);
                }
                else
                {
                    reader.Skip();
                    break;
                }
            }
        }