UX-TV 2/1 フォローアップ: IsolatedStorageSettingsクラス
IsolatedStorageSettingsクラスを利用すると、分離ストレージに (キー, 値) のペアでデータを格納することができます。
IsolatedStorageSettings.Addメソッド
を見ると、
public void Add(
string key,
Object value
)
という形で、System.Object型のデータを格納することができます。
このSystem.Objectクラス
https://msdn.microsoft.com/ja-jp/library/system.object(v=vs.95).aspx
は、.NET Framework の全クラスの基本クラスであり、各言語では、クラスの Object の継承を宣言する必要はありません。
継承が暗黙的であるので、開発者が独自に作ったクラスもSystem.Objectが基本クラスとなります。
このため、特別な宣言を行わなくても、分離ストレージにオブジェクトを保存できます。
(2012/2/2 追記)
・・・と思いきや、落とし穴を発見。
IsolatedStorageSettingsに対してオブジェクトを格納する場合、そのオブジェクトが「シリアル化・逆シリアル化」に対応していることが必須です。
Visual Studioでデバッグ中は、(Saveメソッドを呼び出さない限り)IsolatedStorageSettingsに対してAddメソッドで登録したデータがきちんと保持されています。正しく保存できるかどうかは、Saveメソッドを呼び出して確認が必要です。通常は、このSaveメソッドはアプリケーションの終了時に自動的に呼び出されますが、正しく設定情報が保存されていることを確認するために、開発中にSaveメソッドを呼び出すコードをテストしておくと良いでしょう。
保存できないデータを格納した場合、次のようなエラーが発生します。要するにシリアル化可能でないオブジェクトは保存できません。
System.Object は、 .NET Frameworkの場合、https://msdn.microsoft.com/ja-jp/library/e5kfa45b.aspx にあるように、[SerializableAttribute]があり、シリアル化可能です。
一方、Windows Phone (Silverlight)の場合は、System.Objectは https://msdn.microsoft.com/ja-jp/library/e5kfa45b(v=vs.95).aspx シリアル化可能とは宣言されていません。
クラスをシリアル化するためには、DataContractSerializerが必要になります。
System.Runtime.Serizalizationの参照設定を行い、シリアル化したいクラスに[DataContract]属性を付け、シリアル化したいメンバーに[DataMember]属性を付けます。
例:
namespace ISSetingsTest
{
[DataContract]
public class FeedItem
{
[DataMember]
public string Title { set; get; }
[DataMember]
public Uri uri { set; get; }
[DataMember]
public string Summary { set; get; }
public FeedItem(string title, string summary, Uri u)
{
this.Title = title;
this.uri = u;
this.Summary = summary;
}
}
[DataContract]
public class Feed
{
[DataMember]
public List<FeedItem> Items { set; get; }
}
}
// FeedクラスのオブジェクトをSettingsに保存
IsolatedStorageSettings s = IsolatedStorageSettings.ApplicationSettings;
Feed f = (Feed)this.DataContext;
s["feed"] = f;
s.Save();
必要な場合に検討ください。