Как сохранить и получить списки в PhoneApplicationService.Current.State? - PullRequest
0 голосов
/ 17 октября 2011

Мне нужно хранить и извлекать списки в PhoneApplicationService.Current.State[], но это не список строк или целых чисел:

    public class searchResults
    {
        public string title { get; set; }
        public string description { get; set; }
    }

    public List<searchResults> resultData = new List<searchResults>()
    {
        // 
    };

Значения результата извлекаются из Интернета, и при переключении приложения эти данные необходимо сохранить в изолированном хранилище для многозадачности. Как мне сохранить этот список и получить его снова?

Ответы [ 3 ]

2 голосов
/ 21 октября 2011

Если вопрос действительно о как , чтобы сохранить данные, то вы просто делаете

    PhoneApplicationService.Current.State["SearchResultList"] = resultData;

и для восстановления снова делаете

    List<searchResults> loadedResultData = (List<searchResults>)PhoneApplicationService.Current.State["SearchResultList"];

Вотполный рабочий пример:

    // your list for results
    List<searchResults> resultData = new List<searchResults>();
    // add some example data to save
    resultData.Add(new searchResults() { description = "A description", title = "A title" });
    resultData.Add(new searchResults() { description = "Another description", title = "Another title" });
    // save list of search results to app state
    PhoneApplicationService.Current.State["SearchResultList"] = resultData;

    // --------------------->
    // your app could now be tombstoned
    // <---------------------

    // load from app state
    List<searchResults> loadedResultData = (List<searchResults>)PhoneApplicationService.Current.State["SearchResultList"];

    // check if loading from app state succeeded
    foreach (searchResults result in loadedResultData)
    {
        System.Diagnostics.Debug.WriteLine(result.title);
    }

(Это может перестать работать, когда ваша структура данных становится более сложной или содержит определенные типы.)

0 голосов
/ 21 октября 2011

Ответ Генриха уже суммирует основную идею: вы можете использовать PhoneApplicationService.State со списками, как и с любыми объектами. Ознакомьтесь с документами MSDN о сохранении состояния приложения: Как: сохранить и восстановить состояние приложения для Windows Phone . Здесь есть один важный момент:

Все данные, которые вы храните в словаре состояний, должны быть сериализуемыми, либо напрямую, либо используя данные контракты.

Прямо здесь означает, что классы помечены как [Сериализуемые]. Что касается вашего List<searchResults>, он сериализуем, если searchResults сериализуем. Для этого либо searchResults и все типы, на которые он ссылается, должны быть помечены [Serializable] ИЛИ это должен быть подходящий контракт данных, см. Использование контрактов данных и Сериализуемые типы, Короче говоря, убедитесь, что класс объявлен как открытый и имеет открытый конструктор без параметров.

0 голосов
/ 17 октября 2011

Звучит так, как будто вы просто хотите использовать стандартную сериализацию для своего объекта списка, см. Здесь в документации MSDN http://msdn.microsoft.com/en-us/library/ms973893.aspx

Или также сериализацию XML, если вы хотите что-то, что можно редактировать вне приложения (вытакже можно использовать проводник изолированного хранилища, чтобы извлечь файл и отредактировать его позже) http://msdn.microsoft.com/en-us/library/182eeyhh(v=vs.71).aspx

В качестве альтернативы я бы также предложил попробовать проект Tombstone Helper Мэтта Лейси, который может значительно упростить это для вас http://tombstonehelper.codeplex.com/

...