metro serialize

来源:互联网 发布:零星网络交易不计积分 编辑:程序博客网 时间:2024/05/24 06:49
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Windows.Storage;using System.IO;using System.Runtime.Serialization;using Windows.Storage.Streams;namespace SerializeListWinRT.DataModel{    class LocalStorage    {           [KnownType(typeof(SerializeListWinRT.Cat))]        [DataContractAttribute]        public class Cat        {            [DataMember()]            public String Name { get; set; }        }    static private Dictionary<string, object> _data = new Dictionary<string, object>();    private const string filename = "ngt.xml";    static public Dictionary<string, object> Data    {        get { return _data; }    }    static public T GetItem<T>(string key)    {        T result = default(T);        if (_data.ContainsKey(key))        {            result = (T)_data[key];        }        return result;    }    static public bool ContainsItem(string key)    {        return _data.ContainsKey(key);    }    static async public Task Save<T>()    {        await Windows.System.Threading.ThreadPool.RunAsync((sender) =>        {            LocalStorage.SaveAsync<T>().Wait();        }, Windows.System.Threading.WorkItemPriority.Normal);    }    static async public Task Restore<T>()    {        await Windows.System.Threading.ThreadPool.RunAsync((sender) =>        {            LocalStorage.RestoreAsync<T>().Wait();        }, Windows.System.Threading.WorkItemPriority.Normal);    }    static async private Task SaveAsync<T>()    {        _data.Add("cat", new Cat { Name = "Myname is" });        _data.Add("dog", new Cat { Name = "Myname is" });        StorageFile sessionFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);        IRandomAccessStream sessionRandomAccess = await sessionFile.OpenAsync(FileAccessMode.ReadWrite);        IOutputStream sessionOutputStream = sessionRandomAccess.GetOutputStreamAt(0);        DataContractSerializer sessionSerializer = new DataContractSerializer(typeof(Dictionary<string, object>), new Type[] { typeof(T) });        sessionSerializer.WriteObject(sessionOutputStream.AsStreamForWrite(), _data);        await sessionOutputStream.FlushAsync();    }    static async private Task RestoreAsync<T>()    {        StorageFile sessionFile = await ApplicationData.Current.LocalFolder.CreateFileAsync(filename, CreationCollisionOption.OpenIfExists);        if (sessionFile == null)        {            return;        }        IInputStream sessionInputStream = await sessionFile.OpenReadAsync();        DataContractSerializer sessionSerializer = new DataContractSerializer(typeof(Dictionary<string, object>), new Type[] { typeof(T) });        _data = (Dictionary<string, object>)sessionSerializer.ReadObject(sessionInputStream.AsStreamForRead());    }}
原创粉丝点击