Я не могу сохранить в изолированном хранилище? - PullRequest
0 голосов
/ 16 марта 2012

Я пытаюсь сохранить свою модель в изолированном хранилище:

var settings = IsolatedStorageSettings.ApplicationSettings;

CurrentPlaceNowModel model = new CurrentPlaceNowModel();

settings.TryGetValue<CurrentPlaceNowModel>("model", out model);

if (model == null)
{
    MessageBox.Show("NULL");
    settings.Add("model", new CurrentPlaceNowModel());
    settings.Save();
}
else
    MessageBox.Show("NOT NULL");

Когда я запускаю эму, я, конечно, получаю «NULL», но почему я продолжаю получать его, если закрываю приложение на эму и запускаю его снова из меню (НЕ запуская его снова в Visual Studio).

Разве я не должен получить "NOT NULL" во второй раз?

Ответы [ 2 ]

2 голосов
/ 17 марта 2012

Я бы сделал это по-другому и сделал бы конкретную проверку, чтобы увидеть, существует ли ключ.

CurrentPlaceNowModel model; 

using (var settings = IsolatedStorageSettings.ApplicationSettings)
{
    if (settings.Contains("MODEL"))
    {
        model = settings["MODEL"] as CurrentPlaceNowModel;
    }
    else
    {
        model = new CurrentPlaceNowModel();
        settings.Add("MODEL", model);    
        settings.Save();
    }
}

Эта схема работы с IsolatedStorage определенно работает.

Единственная причина, по которой это не сработает, заключается в том, что CurrentPlaceNowModel невозможно сериализовать с помощью DataContractSerializer. Это то, что ApplicationSettings использует внутри для сериализации объектов.
Вы можете проверить это, сериализовав его таким образом, чтобы увидеть, что происходит.

1 голос
/ 17 марта 2012

Я только что заметил, что вы сделали неправильно:

if (model == null)
{
    MessageBox.Show("NULL");
    settings.Add("model", model);
}

Это будет эквивалентно вызову settings.Add("model", null) - так как вы ожидаете получить ненулевое значение позже?Я подозреваю, что вы хотите:

CurrentPlaceNowModel model;

if (!settings.TryGetValue<CurrentPlaceNowModel>("model", out model))
{
    model = new CurrentPlaceNowModel();
    settings.Add("model", model);
}
...