Изолированное хранилище и сохранение нескольких объектов

Я хочу знать, как лучше всего создать логику сохранения и загрузки, чтобы я мог сохранять и загружать х элементов. Например, в изолированном хранилище я могу легко сохранить составной /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.

1 ответ

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

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

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

1- если элемент добавлен или удален из вашего списка, вы ищите список в 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);
                }
            }
        }
    }
Другие вопросы по тегам