2013-08-12 3 views
1

Я хочу знать, как лучше всего создать логику сохранения и загрузки, чтобы я мог сохранять и загружать элементы x. Например, в изолированном хранилище можно легко сохранить композитный/объект POCO, делая это:Изолированное хранение и сохранение нескольких объектов

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

И нагрузить так:

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

Но как бы я загружаю й количество объектов из IsolatedStorage? Было бы лучше создать коллекцию 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-файл.

+0

То, что я сделал это создать файл XML и заменить его каждый раз, когда вы ВГ e, чтобы что-то сохранить. Он работает нормально, если вы не сохраняете данные очень часто, а ваши данные малы. Другое то, что вы должны использовать «настоящую» базу данных –

ответ

1

Из-за MSDN: IsolatedStorageSettings обеспечивают удобный способ хранения пользовательских данных в виде пар ключ-значение в локальном изолированном хранилище. Типичное использование - сохранение настроек, таких как количество изображений для отображения на странице, параметры макета страницы и т. Д.

, так что я не думаю, что использование IsolatedStorageSettings было бы вашим лучшим вариантом, если бы я был вами, я бы использовал IsolStorageFile.

Чтобы сохранить и загрузить содержимое вашего списка, сценарий будет

1- если элемент добавляется или удаляется из списка, вы searlize список в XML и сохранить его 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- Если вы хотите, чтобы загрузить список в любом месте, вы бы десериализацию файла XML, хранящийся в IsolatedStorageFile

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); 
       } 
      } 
     } 
    } 
+0

Hi Ahmed. Большое спасибо за это. Могу ли я использовать этот код без каких-либо изменений? И в первом разделе вашего кода было бы лучше использовать FileMode.OpenOrCreate? – Subby

+0

urw, я считаю, вы можете это сделать! На самом деле я не могу решить, что лучше (от представления производительности, может быть FileMode.OpenorCreate), но я знаю, что FileMode.Create будет перезаписывать файл, если он уже существует, иначе создайте новый, и это то, что мне нужно в этот код. Наконец, если вы использовали FileMode.OpenorCreate, это вызовет исключение, если вы попытаетесь десериализовать xml-файл. –

+0

В коде я ничего не вижу. Не могли бы вы рассказать? – Subby

Смежные вопросы