Tengo un List<class>
de datos. Y quiero guardarlo y recuperarlo cada vez que mi aplicación se inicie y salga, respectivamente. ¿Cuál es el equivalente a IsolatedStorage
(WP7) en Windows 8. ¿Cómo puedo guardar esta configuración?¿Cuál es la mejor manera de guardar la lista <Object> en la aplicación de Windows 8
Respuesta
en Windows 8, usted tiene que utilizar el LocalFolder
para su aplicación, que se puede acceder usando:
StorageFolder folder = ApplicationData.Current.LocalFolder;
y después hacer referencia a archivos guardados allí mediante el uso de:
var fileToGet = await folder.GetFileAsync("nameOfFile.fileType");
estoy actualmente en una situación similar en un proyecto en el que estoy trabajando, donde quiero almacenar una Lista de objetos personalizados en mi carpeta Local de aplicaciones y hacer que se vuelva a cargar más tarde.
Mi solución fue serializar la lista en una cadena XML y almacenarla en la carpeta de la aplicación. Usted debe ser capaz de adaptar mis métodos:
static public string SerializeListToXml(List<CustomObject> List)
{
try
{
XmlSerializer xmlIzer = new XmlSerializer(typeof(List<CustomObject>));
var writer = new StringWriter();
xmlIzer.Serialize(writer, List);
System.Diagnostics.Debug.WriteLine(writer.ToString());
return writer.ToString();
}
catch (Exception exc)
{
System.Diagnostics.Debug.WriteLine(exc);
return String.Empty;
}
Ahora que tiene la cadena se puede guardar un archivo de texto y poner esto en LocalStorage:
//assuming you already have a list with data called myList
await Windows.Storage.FileIO.WriteTextAsync("xmlFile.txt", SerializeListToXml(myList));
Ahora cuando se carga la aplicación de nuevo puede usar el método de carga mencionado anteriormente para obtener el archivo xml de LocalStorage y luego deserializarlo para recuperar su lista.
string listAsXml = await Windows.Storage.FileIO.ReadTextAsync(xmlFile.txt);
List<CustomObject> deserializedList = DeserializeXmlToList(listAsXml);
Una vez más, adaptar esto a sus necesidades:
public static List<CustomObject> DeserializeXmlToList(string listAsXml)
{
try
{
XmlSerializer xmlIzer = new XmlSerializer(typeof(List<CustomObject>));
XmlReader xmlRead = XmlReader.Create(listAsXml);
List<CustomObject> myList = new List<CustomObject>();
myList = (xmlIzer.Deserialize(xmlRead)) as List<CustomObject>;
return myList;
}
catch (Exception exc)
{
System.Diagnostics.Debug.WriteLine(exc);
List<CustomObject> emptyList = new List<CustomObject>();
return emptyList;
}
}
Se puede utilizar esta clase para almacenar y cargar ajustes:
public static class ApplicationSettings
{
public static void SetSetting<T>(string key, T value, bool roaming = true)
{
var settings = roaming ? ApplicationData.Current.RoamingSettings : ApplicationData.Current.LocalSettings;
settings.Values[key] = value;
}
public static T GetSetting<T>(string key, bool roaming = true)
{
return GetSetting(key, default(T), roaming);
}
public static T GetSetting<T>(string key, T defaultValue, bool roaming = true)
{
var settings = roaming ? ApplicationData.Current.RoamingSettings : ApplicationData.Current.LocalSettings;
return settings.Values.ContainsKey(key) &&
settings.Values[key] is T ?
(T)settings.Values[key] : defaultValue;
}
public static bool HasSetting<T>(string key, bool roaming = true)
{
var settings = roaming ? ApplicationData.Current.RoamingSettings : ApplicationData.Current.LocalSettings;
return settings.Values.ContainsKey(key) && settings.Values[key] is T;
}
public static bool RemoveSetting(string key, bool roaming = true)
{
var settings = roaming ? ApplicationData.Current.RoamingSettings : ApplicationData.Current.LocalSettings;
if (settings.Values.ContainsKey(key))
return settings.Values.Remove(key);
return false;
}
}
Pero sólo se puede guardar y cargar los tipos primitivos (bool, int, cadena, etc.). Es por eso que debe serializar su lista a XML u otro formato que pueda almacenarse en una cadena. Para serializar y deserializar un objeto hacia y desde XML que puede utilizar estos métodos:
public static string Serialize(object obj)
{
using (var sw = new StringWriter())
{
var serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(sw, obj);
return sw.ToString();
}
}
public static T Deserialize<T>(string xml)
{
using (var sw = new StringReader(xml))
{
var serializer = new XmlSerializer(typeof(T));
return (T)serializer.Deserialize(sw);
}
}
Ver también Is there a way to store instances of own classes in the ApplicationSettings of a Windows Store app?
- 1. ¿Cuál es la mejor manera de guardar la configuración del usuario en la aplicación Java?
- 2. ¿Cuál es la manera de implementar la funcionalidad Guardar/Cargar?
- 3. ¿Cuál es la mejor manera de comparar programas en Windows?
- 4. ¿La mejor manera de guardar datos en una aplicación Java?
- 5. ¿Cuál es la mejor manera de guardar datos localmente en una aplicación WPF?
- 6. ¿Cuál es la mejor manera de copiar una lista?
- 7. ¿Cuál es la mejor manera de ordenar la lista con parámetros de clasificación personalizados en Python?
- 8. ¿Cuál es la mejor manera de perfilar/optimizar la aplicación del motor de la aplicación Google?
- 9. ¿Cuál es la mejor manera de perfilar una aplicación Sinatra?
- 10. ¿Cuál es la mejor manera de implementar una aplicación Pylons?
- 11. ¿Cuál es la mejor manera de transferir datos de python a otra aplicación en Windows?
- 12. ¿Cuál es la mejor manera de serializar la configuración de la aplicación Delphi?
- 13. ¿Cuál es la mejor manera de dibujar en la consola?
- 14. ¿Cuál es la mejor manera de almacenar la configuración específica de la aplicación en los rieles?
- 15. ¿Cuál es la mejor manera de afirmar la igualdad numpy.array?
- 16. Cuál es la mejor aplicación de .dispose()
- 17. ¿Cuál es la mejor manera de controlar la versión de los activos gráficos en Windows?
- 18. ¿Cuál es la mejor manera de modernizar la aplicación J2EE de la era 2002?
- 19. ¿Es la Lista.Encontrar <T> considerada peligrosa? ¿Cuál es una mejor manera de hacer la lista <T>. Find (Predicado <T>)?
- 20. ¿Cuál es la mejor manera de ampliar la funcionalidad?
- 21. Cuál es la mejor manera de evitar pérdidas de memoria en la aplicación WPF PRISM/MVVM
- 22. ¿Cuál es la mejor manera de almacenar cadenas UTF-8 en memoria en C/C++?
- 23. ¿Cuál es la mejor manera de ordenar un IList <T> en .Net 2.0?
- 24. La mejor manera de matar la instancia de la aplicación
- 25. Android: la mejor manera de guardar los datos almacenados en la aplicación Singleton Class
- 26. ¿Cuál es la mejor manera de mostrar HTML en Flex?
- 27. ¿Cuál es la mejor manera de almacenar la configuración global de la aplicación en una aplicación de Rails?
- 28. ¿Cuál es la mejor manera de verificar si la vista es visible en la ventana?
- 29. ¿La mejor manera de guardar los cambios en la aplicación web MVVM/Knockoutjs?
- 30. La mejor manera de guardar datos en el iPhone