using System.IO; using System.Threading.Tasks; using System.Xml.Serialization; using Filtration.ObjectModel.ThemeEditor; namespace Filtration.ThemeEditor.Services { internal interface IThemePersistenceService { Task LoadThemeAsync(string filePath); Task SaveThemeAsync(Theme theme, string filePath); } internal class ThemePersistenceService : IThemePersistenceService { public async Task LoadThemeAsync(string filePath) { Theme loadedTheme = null; await Task.Run(() => { var xmlSerializer = new XmlSerializer(typeof (Theme)); using (Stream reader = new FileStream(filePath, FileMode.Open)) { loadedTheme = (Theme) xmlSerializer.Deserialize(reader); } loadedTheme.FilePath = filePath; }); return loadedTheme; } public async Task SaveThemeAsync(Theme theme, string filePath) { await Task.Run(() => { var xmlSerializer = new XmlSerializer(typeof (Theme)); using (Stream writer = new FileStream(filePath, FileMode.Create)) { xmlSerializer.Serialize(writer, theme); } }); } } }