Persistez facilement vos données sur Windows Phone 7 avec l’Isolated Storage Application Settings
Bonjour à tous !
Aujourd’hui, je partage un code inspiré par un helper sur lequel j’avais mis la main il y a longtemps, mis en ligne par Microsoft
Il permet d’utiliser une partie de l’IsolatedStorage (nommé ApplicationSettings) pour pouvoir sauvegarder des données.
Voici un rappel visuel des trois options liées au stockage local sur Windows Phone
Dans le cas de l’Application Settings, nous pouvons stocker des chaînes de caractère en leur attribuant une clef (système Key/Value Pair), qui va aussi nous permettre par la suite de récupérer l’objet.
Du coup, pour pouvoir gérer d’autres types objets, nous allons passer par une étape de sérialisation/désérialisation.
Nous partons sur une classe statique, qui va accueillir les méthodes suivantes :
public static T GetDataContractObject<T>(string key) public static void SaveDataContractObject<T>(string key, T objectToSave) public static void DeleteObject(string key) public static void DeleteAll() private static string Serialize(object objectToSerialize) private static T Deserialize<T>(string objectToDeserialize)
Le résultat final dans une application finale Windows Phone est vraiment très simple à utiliser :
// Considérons une liste de chaîne de caractères
List<string> myCollection = new List<string>() { "valeur", "valeur 2", "valeur 3"};
// On sauvegarde l'objet
IsolatedStorageHelper.SaveDataContractObject("MyCollectionKey", myCollection)
// On récupère l'objet
List<string> myCollectionCopy = IsolatedStorageHelper.GetDataContractObject<List<String>>("MyCollectionKey")
// On supprime l'objet
IsolatedStorageHelper.DeleteObject("MyCollectionKey");
// On vide l'ApplicationSettings
IsolatedStorageHelper.DeleteAll();
Difficile de faire plus simple hein
Avant ça, codons et tentons de comprendre ce helper.
On crée notre classe statique
public static class IsolatedStorageHelper
Ensuite, on va rajouter la référence vers la bibliothèque System.Runtime.Serialization, et ajouter les using :
using System.Runtime.Serialization; using System.IO.IsolatedStorage; using System.IO;
Commençons par la méthode Serialize : elle prend en paramètre l’objet a sérialiser.
Ce qui se passe : on sérialise l’objet, c’est à dire qu’on le transforme en un flux de données, représenté ici par la classe MemoryStream . Grâce à la classe StreamReader, on pourra représenter l’objet sous la forme d’une chaîne de caractère.
private static string Serialize(object objectToSerialize)
{
using (MemoryStream ms = new MemoryStream())
{
DataContractSerializer serializer = new DataContractSerializer(objectToSerialize.GetType());
serializer.WriteObject(ms, objectToSerialize);
ms.Position = 0;
using (StreamReader reader = new StreamReader(ms))
{
return reader.ReadToEnd();
}
}
}
Ensuite, cette classe sera utilisée par SaveDataContractObject, une classe qui prend en paramètre une clef, et l’objet à persister. On remarquera l’utilisation du générique T, qui représente la classe, le type de l’objet.
public static void SaveDataContractObject<T>(string key, T objectToSave)
{
string serializedObject = Serialize(objectToSave);
IsolatedStorageSettings.ApplicationSettings[key] = serializedObject;
}
Maintenant, on va créer le mécanisme inverse, en désérialisant la chaîne de caractère vers un flux de données.
private static T Deserialize<T>(string objectToDeserialize)
{
using (MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(objectToDeserialize)))
{
DataContractSerializer serializer = new DataContractSerializer(typeof(T));
return (T)serializer.ReadObject(ms);
}
}
Et la méthode liée
public static T GetDataContractObject<T>(string key)
{
if (IsolatedStorageSettings.ApplicationSettings.Contains(key))
{
string serializedObject = IsolatedStorageSettings.ApplicationSettings[key].ToString();
return Deserialize<T>(serializedObject);
}
return default(T);
}
On peut éventuellement compléter notre helper avec ces deux méthodes pour centraliser complètement la gestion de l’Isolated Storage :
public static void DeleteObject(string key)
{
IsolatedStorageSettings.ApplicationSettings.Remove(key);
}
public static void DeleteAll()
{
IsolatedStorageSettings.ApplicationSettings.Clear();
}
Voilà c’est tout !
J’ai remarqué que pas mal de personnes posaient des questions relatives au stockage isolé sur Windows Phone, si vous voulez persister des données facilement et sans vous prendre la tête, ce helper est fait pour vous
Quelques liens sur la persistance des données sur Windows Phone :











