- Timestamp:
- 07/05/18 17:22:34 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PersistenceReintegration/HeuristicLab.Persistence/4.0/Core/Mapper.cs
r15529 r15986 93 93 public Type GetType(uint typeId) { 94 94 return types.GetValue(typeId); 95 } 96 97 public bool TryGetType(uint typeId, out Type type) { 98 return types.TryGetValue(typeId, out type); 95 99 } 96 100 #endregion … … 132 136 o = transformer.ToObject(box, this); 133 137 boxId2Object.Add(boxId, o); 134 transformer.FillFromBox(o, box, this);138 if (o != null) transformer.FillFromBox(o, box, this); 135 139 } 136 140 … … 176 180 mapper.strings = new Index<string>(bundle.Strings); 177 181 178 return mapper.GetObject(bundle.RootBoxId); 182 var root = mapper.GetObject(bundle.RootBoxId); 183 184 ExecuteAfterDeserializationHooks(mapper.boxId2Object.Values.ToArray()); 185 186 return root; 187 } 188 189 private static void ExecuteAfterDeserializationHooks(object[] objects) { 190 var emptyArgs = new object[0]; 191 192 foreach (var obj in objects) { 193 if (!StorableTypeAttribute.IsStorableType(obj.GetType())) continue; // TODO: performance 194 195 var typeStack = new Stack<Type>(); 196 for (var type = obj.GetType(); type != null; type = type.BaseType) { 197 typeStack.Push(type); 198 } 199 200 while (typeStack.Any()) { 201 var type = typeStack.Pop(); 202 if (!StorableTypeAttribute.IsStorableType(type)) continue; // object <- mytype (has hooks) or object <- valuetype <- mystruct 203 204 var typeInfo = staticCache.GetTypeInfo(type); 205 foreach (var hook in typeInfo.AfterDeserializationHooks) { 206 hook.Invoke(obj, emptyArgs); 207 } 208 } 209 } 179 210 } 180 211 }
Note: See TracChangeset
for help on using the changeset viewer.