/// <summary> /// Loads user settings from isolated storage. /// </summary> /// <remarks> /// Non-critical exceptions are handled by writing an error message in the output window and /// returning null. /// </remarks> public static T Load <T>(string providerId, string name, Action <T> onLoaded, ConnectedServiceLogger logger) where T : class { string fileName = UserSettingsPersistenceHelper.GetStorageFileName(providerId, name); T result = null; UserSettingsPersistenceHelper.ExecuteNoncriticalOperation( () => { using (IsolatedStorageFile file = UserSettingsPersistenceHelper.GetIsolatedStorageFile()) { if (file.FileExists(fileName)) { IsolatedStorageFileStream stream = null; try { stream = file.OpenFile(fileName, FileMode.Open); using (XmlReader reader = XmlReader.Create(stream)) { stream = null; DataContractSerializer dcs = new DataContractSerializer(typeof(T)); result = dcs.ReadObject(reader) as T; } } finally { if (stream != null) { stream.Dispose(); } } if (onLoaded != null && result != null) { onLoaded(result); } } } }, logger, Resources.UserSettingsHelper_FailedLoading, fileName); return(result); }
/// <summary> /// Saves user settings to isolated storage. The data is stored with the user's roaming profile. /// </summary> /// <remarks> /// Non-critical exceptions are handled by writing an error message in the output window. /// </remarks> public static void Save(object userSettings, string providerId, string name, Action onSaved, ConnectedServiceLogger logger) { string fileName = UserSettingsPersistenceHelper.GetStorageFileName(providerId, name); UserSettingsPersistenceHelper.ExecuteNoncriticalOperation( () => { using (IsolatedStorageFile file = UserSettingsPersistenceHelper.GetIsolatedStorageFile()) { IsolatedStorageFileStream stream = null; try { // note: this overwrites existing settings file if it exists stream = file.OpenFile(fileName, FileMode.Create); using (XmlWriter writer = XmlWriter.Create(stream)) { stream = null; DataContractSerializer dcs = new DataContractSerializer(userSettings.GetType()); dcs.WriteObject(writer, userSettings); writer.Flush(); } } finally { if (stream != null) { stream.Dispose(); } } } if (onSaved != null) { onSaved(); } }, logger, Resources.UserSettingsHelper_FailedSaving, fileName); }