c# - Almacenamiento y almacenamiento de objetos mĂșltiples aislados
windows-phone-8 isolatedstorage (1)
Deseo saber cuál es la mejor manera de crear una lógica de Guardar y Cargar para que pueda guardar y cargar x elementos. Por ejemplo, en Almacenamiento aislado, puedo guardar fácilmente un objeto compuesto / POCO haciendo esto:
var settings = IsolatedStorageSettings.ApplicationSettings;
settings.Add("key", myObject);
Y carga así:
var settings = IsolatedStorageSettings.ApplicationSettings;
return settings["key"] as MyObject;
Pero, ¿cómo cargaría x cantidad de Objetos de IsolatedStorage? ¿Sería mejor crear una colección List<MyObject>
y guardar y cada vez que quiera guardar otro objeto, básicamente .Add(newObject)
el existente y lo haré .Add(newObject)
y lo .Add(newObject)
nuevo?
Entonces algo como esto:
List<MyObject> myObjects = new List<MyObject>();
myObjects.Add(newObject);
settings.Add("myObjects", myObjects);
y cuando carga:
var myObjects = settings["myObjects"] as List<MyObject>;
Sin embargo, esto requeriría eliminar y volver a agregar la colección como settings.Add
requiere una clave única. ¿Esta sería la mejor manera?
Prefiero usar ajustes que un archivo Iso.
Debido a MSDN: IsolatedStorageSettings proporciona una manera conveniente de almacenar datos específicos del usuario como pares clave-valor en un IsolatedStorageFile local. Un uso típico es guardar la configuración, como la cantidad de imágenes para mostrar por página, las opciones de diseño de página, etc.
así que no creo que el uso de IsolatedStorageSettings sea tu mejor opción, si yo fuera tú, usaría IsolatedStorageFile.
Para guardar y cargar el contenido de su lista, el escenario sería
1- Si se agrega o elimina un elemento de su lista, busque la lista en xml y la guarde 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- Cuando desee cargar su lista en cualquier lugar, deserializará el archivo xml almacenado en 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);
}
}
}
}