Windows 8學習筆記(四)–Storage資料存放區

來源:互聯網
上載者:User

AppData在Metro App中的儲存主要由兩種形式,一種是索引值對的形式,還有一種是StorageFile檔案的儲存形式。

其中索引值對形式的儲存又分幾種:ApplicationDataCompositeValue複合值儲存、ApplicationDataContainer容器資料存放區、ApplicationDataContainerSettings普通的容器資料存放區。

注意這種索引值對的儲存值只能以字元形式儲存,若要儲存某對象,需轉成XMLjson等其它字元資料。

ApplicationDataCompositeValue的用法

支援複合值的儲存

Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings; // Create a composite setting                Windows.Storage.ApplicationDataCompositeValue composite = new Windows.Storage.ApplicationDataCompositeValue();composite["intVal"] = 1;composite["strVal"] = "string";localSettings.Values["exampleCompositeSetting"] = composite;// Read data from a composite settingWindows.Storage.ApplicationDataCompositeValue composite = (Windows.Storage.ApplicationDataCompositeValue)localSettings.Values["exampleCompositeSetting"];                // Delete a composite settinglocalSettings.Values.Remove("exampleCompositeSetting");
 

 ApplicationDataContainer的用法

 支援建立、刪除、枚舉、資料容器層次的貫穿

Windows.Storage.ApplicationDataContainer localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;// Create a setting in a containerWindows.Storage.ApplicationDataContainer container =    localSettings.CreateContainer("exampleContainer", Windows.Storage.ApplicationDataCreateDisposition.Always);if (localSettings.Containers.ContainsKey("exampleContainer")){   localSettings.Containers["exampleContainer"].Values["exampleSetting"] = "Hello Windows";}// Read data from a setting in a containerbool hasContainer = localSettings.Containers.ContainsKey("exampleContainer");bool hasSetting = false;if (hasContainer){   hasSetting = localSettings.Containers["exampleContainer"].Values.ContainsKey("exampleSetting");}// Delete a containerlocalSettings.DeleteContainer("exampleContainer");
 

 ApplicationDataContainerSettings的用法

 最簡單的索引值對儲存

var localSettings = Windows.Storage.ApplicationData.Current.LocalSettings;     // Create a simple settinglocalSettings.Values["exampleSetting"] = "Hello Windows 8";     if (localSettings.Values.ContainsKey("exampleSetting"))  {       // Read data from a simple setting       Object value = localSettings.Values["exampleSetting"];      }                localSettings.Values.Remove("exampleSetting");

 

StorageFile的儲存,以檔案的形式進行儲存

存入資料

static async public Task SaveAsync(T data,string fileName)        {            // Get the output stream for the SessionState file.            StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(fileName, CreationCollisionOption.ReplaceExisting);            IRandomAccessStream raStream = await file.OpenAsync(FileAccessMode.ReadWrite);            using (IOutputStream outStream = raStream.GetOutputStreamAt(0))            {                // Serialize the Session State.                                DataContractSerializer serializer = new DataContractSerializer(typeof(T));                serializer.WriteObject(outStream.AsStreamForWrite(), data);                await outStream.FlushAsync();            }        }

 

取檔案資料

static async public Task RestoreAsync(string filename)        {            // Get the input stream for the SessionState file.            T sessionState_ = default(T);            try            {                StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(filename);                if (file == null) return sessionState_;                IInputStream inStream = await file.OpenSequentialReadAsync();                // Deserialize the Session State.                DataContractSerializer serializer = new DataContractSerializer(typeof(T));                                sessionState_= (T)serializer.ReadObject(inStream.AsStreamForRead());                            }            catch (Exception)            {                // Restoring state is best-effort.  If it fails, the app will just come up with a new session.                            }            return sessionState_;        }

以上就是Metro Style App中資料存放區的幾種方式,怎麼樣,跟Windows Phone7中還是有些差別的吧。。。

 

順便整理一下xml/json格式資料的序列與還原序列化的通用方法

JSON資料的序列與反序列

public static T DataContractJsonDeSerializer(string jsonString)        {            var ds = new DataContractJsonSerializer(typeof(T));            var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));            T obj = (T)ds.ReadObject(ms);            ms.Dispose();            return obj;        }        public static string ToJsonData(object item)        {            DataContractJsonSerializer serializer = new DataContractJsonSerializer(item.GetType());            string result = String.Empty;            using (MemoryStream ms = new MemoryStream())            {                serializer.WriteObject(ms, item);                ms.Position = 0;                using (StreamReader reader = new StreamReader(ms))                {                    result = reader.ReadToEnd();                }            }            return result;        }

XML資料的序列與反序列

///         /// 需要序列化XML資料對象        ///         ///         public static string XMLSerialize(object objectToSerialize)        {            string result = "";            using (MemoryStream ms = new MemoryStream())            {                DataContractSerializer serializer = new DataContractSerializer(objectToSerialize.GetType());                serializer.WriteObject(ms, objectToSerialize);                ms.Position = 0;                using (StreamReader reader = new StreamReader(ms))                {                    result = reader.ReadToEnd();                }            }            return result;        }               ///         /// XML資料還原序列化        ///         /// 還原序列化對象        ///         public static T XMLDeserialize(string xmlstr)        {            byte[] newBuffer = System.Text.Encoding.UTF8.GetBytes(xmlstr);            if (newBuffer.Length == 0)            {                return default(T);            }            using (MemoryStream ms = new MemoryStream(newBuffer))            {                DataContractSerializer serializer = new DataContractSerializer(typeof(T));                return (T)serializer.ReadObject(ms);            }        }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.