MetroStyleApp入門 vol27.ローカルにデータを保存する

火曜日 , 3, 7月 2012 Leave a comment

 (本記事は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

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です