1

x 個のアイテムを保存およびロードできるように、保存およびロード ロジックを作成する最善の方法を知りたいです。たとえば、Isolated Storage では、次のようにして複合/POCO オブジェクトを簡単に保存できます。

var settings = IsolatedStorageSettings.ApplicationSettings;
settings.Add("key", myObject);

そして、次のようにロードします。

var settings = IsolatedStorageSettings.ApplicationSettings;
return settings["key"] as MyObject;

しかし、IsolatedStorage から x 個のオブジェクトをロードするにはどうすればよいでしょうか? List<MyObject>コレクションを作成して保存し、別のオブジェクトを保存したいときはいつでも、基本的に既存のものをロードして再度保存するのが最善でしょう.Add(newObject)か?

だから、このようなもの:

List<MyObject> myObjects = new List<MyObject>();
myObjects.Add(newObject);
settings.Add("myObjects", myObjects);

そしてロード時:

var myObjects = settings["myObjects"] as List<MyObject>;

settings.Addただし、一意のキーが必要なため、コレクションを削除して追加し直す必要があります。これが最善の方法でしょうか?

Iso ファイルよりもむしろ設定を使用したいと思います。

4

1 に答える 1

1

MSDN によると、IsolatedStorageSettings は、ユーザー固有のデータをキーと値のペアとしてローカルの IsolatedStorageFile に保存する便利な方法を提供します。一般的な用途は、ページごとに表示する画像の数、ページ レイアウト オプションなどの設定を保存することです。

したがって、IsolatedStorageSettings を使用することが最善の選択肢になるとは思いません。もし私があなたなら、IsolatedStorageFile を使用します。

リストのコンテンツを保存してロードするには、シナリオは次のようになります。

1-リストにアイテムが追加または削除された場合、リストをxmlにserlizeしてIsolatedStorageFileに保存します

 private static void Serialize(string fileName, object source)
    {
        var userStore = IsolatedStorageFile.GetUserStoreForApplication();

        using (var stream = new IsolatedStorageFileStream(fileName, FileMode.Create, userStore))
        {
            XmlSerializer serializer = new XmlSerializer(source.GetType());
            serializer.Serialize(stream, source);
        }
    }

2- リストを任意の場所にロードする場合は、IsolatedStorageFile に保存されている xml ファイルを逆シリアル化します。

public static void Deserialize<T>(ObservableCollection<T> list , string filename)
    {

        list = new ObservableCollection<T>();

        var userStore = IsolatedStorageFile.GetUserStoreForApplication();
        if (userStore.FileExists(filename))
        {
            using (var stream = new IsolatedStorageFileStream(filename, FileMode.Open, userStore))
            {
                XmlSerializer serializer = new XmlSerializer(list.GetType());
                var items = (ObservableCollection<T>)serializer.Deserialize(stream);

                foreach (T item in items)
                {
                    list.Add(item);
                }
            }
        }
    }
于 2013-08-13T00:17:54.130 に答える