(本記事はVisualStudio2012RC&Windows8RPで確認しています)
以前に同じアカウントでデータを共有するローミングについて書きました。
MetroStyleApp入門 vol19:データのローミング(仮)
今回は、ローミングせずにローカル環境にデータを保存する方法を紹介。
ローミングの際はRoamingSettingsを利用しましたが、今回はLocalSettingsクラスを利用します。
var storage = Windows.Storage.ApplicationData.Current.LocalSettings; if (!storage.Containers.ContainsKey("key")) { storage.CreateContainer("key", Windows.Storage.ApplicationDataCreateDisposition.Always); }
値を保存するには以下のようにValuesの配列に保存します。
var storage.Values["key"] = "hoge";
ただしこれは文字列を保存する場合に限ります。
文字列以外を保存する場合はシリアライズして値を保存します。
DataContractSerializerを利用します。
// HogeClassというカスタムクラスをシリアライズして保存 using (MemoryStream stream = new MemoryStream()) { DataContractSerializer serializer = new DataContractSerializer(HogeClass.GetType()); serializer.WriteObject(stream, HogeClass); stream.Position = 0; using(StreamReader reader = new StreamReader(stream)) { storage.Values["Customer"] = reader.ReadToEnd(); } }
保存対象となるデータは DataContractAttribute 属性がクラスに適用され、シリアル化の対象を DataContractSerializer に指示する DataMemberAttributeを指定してある必要があります。
と書くとわかりずらいですが、このリンク先の記事のようにclassに[DataContract]、member変数に[DataMember]属性を指定してあげる等が必要です。
シリアライズして保存したデータはデシリアライズしてもとに戻してあげる必要があります。
var str = (string)storage.Values["key"]; byte[] byteArray = Encoding.UTF8.GetBytes(str); MemoryStream stream = new MemoryStream(byteArray); DataContractSerializer serializer = new DataContractSerializer(HogeClass.GetType()); var hoge = (HogeClass)serializer.ReadObject(stream);
Please give us your valuable comment