private static void ReadCollectionEntries <T>(IDataObject parent, ICollection <T> val, XmlReader xml, CallXmlFunction <T, XmlReader> func) where T : IValueCollectionEntry, new() { if (val == null) { throw new ArgumentNullException("val"); } if (xml == null) { throw new ArgumentNullException("xml"); } //// reset target collection //val.Clear(); using (var entries = xml.ReadSubtree()) { while (entries.Read()) { if (entries.NodeType == XmlNodeType.Element && entries.LocalName == "CollectionEntry") { var obj = new T(); using (var children = xml.ReadSubtree()) { while (children.Read()) { if (children.NodeType == XmlNodeType.Element) { func(obj, children); } } } if (parent == null) { val.Add(obj); } else { if (parent.Context != null) { parent.Context.Internals().AttachAsNew(obj); } obj.ParentObject = parent; } } } } }
private static void WriteCollectionEntries <T>(IEnumerable <T> val, XmlWriter xml, string name, string ns, CallXmlFunction <T, XmlWriter> func) { if (val == null) { throw new ArgumentNullException("val"); } if (xml == null) { throw new ArgumentNullException("xml"); } xml.WriteStartElement(name, ns); foreach (T obj in val) { xml.WriteStartElement("CollectionEntry"); func(obj, xml); xml.WriteEndElement(); } xml.WriteEndElement(); }