diff options
author | Jason Smith <jason.smith@xamarin.com> | 2016-03-22 13:02:25 -0700 |
---|---|---|
committer | Jason Smith <jason.smith@xamarin.com> | 2016-03-22 16:13:41 -0700 |
commit | 17fdde66d94155fc62a034fa6658995bef6fd6e5 (patch) | |
tree | b5e5073a2a7b15cdbe826faa5c763e270a505729 /Xamarin.Forms.Platform.WinRT/WindowsSerializer.cs | |
download | xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.gz xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.tar.bz2 xamarin-forms-17fdde66d94155fc62a034fa6658995bef6fd6e5.zip |
Initial import
Diffstat (limited to 'Xamarin.Forms.Platform.WinRT/WindowsSerializer.cs')
-rw-r--r-- | Xamarin.Forms.Platform.WinRT/WindowsSerializer.cs | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.WinRT/WindowsSerializer.cs b/Xamarin.Forms.Platform.WinRT/WindowsSerializer.cs new file mode 100644 index 00000000..4e0ad794 --- /dev/null +++ b/Xamarin.Forms.Platform.WinRT/WindowsSerializer.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Runtime.Serialization; +using System.Threading.Tasks; +using Windows.Storage; + +#if WINDOWS_UWP + +namespace Xamarin.Forms.Platform.UWP +#else + +namespace Xamarin.Forms.Platform.WinRT +#endif +{ + internal sealed class WindowsSerializer : IDeserializer + { + const string PropertyStoreFile = "PropertyStore.forms"; + + public async Task<IDictionary<string, object>> DeserializePropertiesAsync() + { + try + { + StorageFile file = await ApplicationData.Current.RoamingFolder.GetFileAsync(PropertyStoreFile).DontSync(); + using(Stream stream = (await file.OpenReadAsync().DontSync()).AsStreamForRead()) + { + if (stream.Length == 0) + return new Dictionary<string, object>(4); + + var serializer = new DataContractSerializer(typeof(IDictionary<string, object>)); + return (IDictionary<string, object>)serializer.ReadObject(stream); + } + } + catch (FileNotFoundException) + { + return new Dictionary<string, object>(4); + } + } + + public async Task SerializePropertiesAsync(IDictionary<string, object> properties) + { + StorageFile file = await ApplicationData.Current.RoamingFolder.CreateFileAsync(PropertyStoreFile, CreationCollisionOption.ReplaceExisting).DontSync(); + using(StorageStreamTransaction transaction = await file.OpenTransactedWriteAsync().DontSync()) + { + try + { + Stream stream = transaction.Stream.AsStream(); + var serializer = new DataContractSerializer(typeof(IDictionary<string, object>)); + serializer.WriteObject(stream, properties); + await transaction.CommitAsync().DontSync(); + } + catch (Exception e) + { + Debug.WriteLine("Could not move new serialized property file over old: " + e.Message); + } + } + } + } +}
\ No newline at end of file |