public void Save() { ModDataSaveHeader header = new ModDataSaveHeader(_stream, _saveableMods.Keys, _modManager); // Allocate the required header space header.WriteHeader(); BinaryFormatter formatter = new BinaryFormatter(); foreach (var saveableObjectMod in _saveableMods) { header.SetSavePosition(saveableObjectMod.Key, _stream.Position); var fieldInfo = saveableObjectMod.Value as FieldInfo; if (fieldInfo != null) { object saveObject = fieldInfo.GetValue(saveableObjectMod.Key); formatter.Serialize(_stream, saveObject ?? NullSaveValue.Instance); } else { var propertyInfo = saveableObjectMod.Value as PropertyInfo; if (propertyInfo != null) { object saveObject = propertyInfo.GetMethod.Invoke(saveableObjectMod.Key, null); formatter.Serialize(_stream, saveObject ?? NullSaveValue.Instance); } } } // Re-write the header, now with the mods' save positions header.WriteHeader(); }
public void Load() { ModDataSaveHeader header = new ModDataSaveHeader(_stream, _saveableMods.Keys, _modManager); header.ReadHeader(); BinaryFormatter formatter = new BinaryFormatter(); foreach (var saveableObjectMod in _saveableMods) { long?position = header.GetSavePosition(saveableObjectMod.Key); if (!position.HasValue) { continue; } _stream.Seek(position.Value, SeekOrigin.Begin); var fieldInfo = saveableObjectMod.Value as FieldInfo; if (fieldInfo != null) { object saveObject = formatter.Deserialize(_stream); if (saveObject is NullSaveValue) { fieldInfo.SetValue(saveableObjectMod.Key, null); } else { fieldInfo.SetValue(saveableObjectMod.Key, saveObject); } } else { var propertyInfo = saveableObjectMod.Value as PropertyInfo; if (propertyInfo != null) { object saveObject = formatter.Deserialize(_stream); if (saveObject is NullSaveValue) { propertyInfo.SetMethod.Invoke(saveableObjectMod.Key, new object[] { null }); } else { propertyInfo.SetMethod.Invoke(saveableObjectMod.Key, new[] { saveObject }); } } } } }
public void Load() { ModDataSaveHeader header = new ModDataSaveHeader(_stream, _saveableMods.Keys,_modManager); header.ReadHeader(); BinaryFormatter formatter = new BinaryFormatter(); foreach (var saveableObjectMod in _saveableMods) { long? position = header.GetSavePosition(saveableObjectMod.Key); if (!position.HasValue) continue; _stream.Seek(position.Value, SeekOrigin.Begin); var fieldInfo = saveableObjectMod.Value as FieldInfo; if (fieldInfo != null) { object saveObject = formatter.Deserialize(_stream); if (saveObject is NullSaveValue) { fieldInfo.SetValue(saveableObjectMod.Key, null); } else { fieldInfo.SetValue(saveableObjectMod.Key, saveObject); } } else { var propertyInfo = saveableObjectMod.Value as PropertyInfo; if (propertyInfo != null) { object saveObject = formatter.Deserialize(_stream); if (saveObject is NullSaveValue) { propertyInfo.SetMethod.Invoke(saveableObjectMod.Key, new object[] { null }); } else { propertyInfo.SetMethod.Invoke(saveableObjectMod.Key, new[] { saveObject }); } } } } }
public void Save() { ModDataSaveHeader header = new ModDataSaveHeader(_stream, _saveableMods.Keys,_modManager); // Allocate the required header space header.WriteHeader(); BinaryFormatter formatter = new BinaryFormatter(); foreach (var saveableObjectMod in _saveableMods) { header.SetSavePosition(saveableObjectMod.Key, _stream.Position); var fieldInfo = saveableObjectMod.Value as FieldInfo; if (fieldInfo != null) { object saveObject = fieldInfo.GetValue(saveableObjectMod.Key); formatter.Serialize(_stream, saveObject ?? NullSaveValue.Instance); } else { var propertyInfo = saveableObjectMod.Value as PropertyInfo; if (propertyInfo != null) { object saveObject = propertyInfo.GetMethod.Invoke(saveableObjectMod.Key, null); formatter.Serialize(_stream, saveObject ?? NullSaveValue.Instance); } } } // Re-write the header, now with the mods' save positions header.WriteHeader(); }