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