Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
04/15/08 16:41:18 (16 years ago)
Author:
gkronber
Message:

created a branch that combines the XmlReader and XmlWriter branches

Location:
branches/XmlReaderWriterBranch
Files:
1 edited
1 copied

Legend:

Unmodified
Added
Removed
  • branches/XmlReaderWriterBranch/HeuristicLab.Core/PersistenceManager.cs

    r119 r125  
    5757    }
    5858
    59     public static IStorable Restore(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) {
    60       Guid guid = new Guid(node.Attributes["GUID"].Value);
    61       if (restoredObjects.ContainsKey(guid)) {
     59    public static IStorable Restore(XmlReader reader, string elementName, IDictionary<Guid, IStorable> restoredObjects) {
     60      reader = reader.ReadSubtree();
     61      reader.Read();
     62      if(reader.Name != elementName) throw new XmlException("Expected: \"" + elementName + "\" found: \"" + reader.Name+"\"");
     63      IStorable result = RestoreElement(reader, restoredObjects);
     64      reader.Read();
     65      reader.Close();
     66      return result;
     67    }
     68
     69    public static IStorable Restore(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
     70      reader = reader.ReadSubtree();
     71      reader.Read();
     72      IStorable result = RestoreElement(reader, restoredObjects);
     73      reader.Read();
     74      reader.Close();
     75      return result;
     76    }
     77    private static IStorable RestoreElement(XmlReader reader, IDictionary<Guid, IStorable> restoredObjects) {
     78      Guid guid = new Guid(reader["GUID"]);
     79      if(restoredObjects.ContainsKey(guid)) {       
    6280        return restoredObjects[guid];
    6381      } else {
    64         Type type = Type.GetType(node.Attributes["Type"].Value, true);
     82        Type type = Type.GetType(reader["Type"], true);
    6583        IStorable instance = (IStorable)Activator.CreateInstance(type);
    6684        restoredObjects.Add(guid, instance);
    67         instance.Populate(node, restoredObjects);
     85        instance.Populate(reader, restoredObjects);
    6886        return instance;
    6987      }
     
    89107    }
    90108    public static IStorable Load(Stream stream) {
    91       XmlDocument doc = new XmlDocument();
    92       doc.Load(stream);
    93       return PersistenceManager.Restore(doc.ChildNodes[1], new Dictionary<Guid, IStorable>());
     109      XmlReaderSettings settings = new XmlReaderSettings();
     110      settings.IgnoreComments = true;
     111      settings.IgnoreWhitespace = true;
     112      XmlReader reader = XmlReader.Create(stream, settings);
     113      reader.MoveToContent(); // read "<?xml version="1.0"?/>
     114      return PersistenceManager.RestoreElement(reader, new Dictionary<Guid, IStorable>());
    94115    }
    95116
Note: See TracChangeset for help on using the changeset viewer.