2010-10-19 9 views
1

Je suis impatient de sérialiser un dictionnaire afin de sauvegarder certaines de ses informations, plus précisément la clé et l'une de ses valeurs, dans le stockage Silverlight isolé. J'ai lu beaucoup de questions traitant du même sujet sur ces forums, mais aucune n'expliquait ce que j'essayais de faire, ou du moins pas d'une manière que je pouvais comprendre. Je ne sais pas non plus ce que je pourrais sérialiser: XmlSerializer, JSON, etc ... J'essaie d'effectuer cette sérialisation afin de 'sauvegarder' certains des paramètres de l'utilisateur, je n'ai pas l'intention de les envoyer à un Service Web ou quoi que ce soit, c'est seulement l'utilisation sera à l'intérieur de l'application.Comment sérialiser la clé et une seule valeur d'objet d'un dictionnaire générique <TKey, TValue>?

Voici la structure de mon Dictionnaire:

static Dictionary<string, User> Mydictionary 

Et voici le « User » classe:

public class User 
{ 
    public User() 
    { 

    } 

    public string name; 
    public string age; 
    public string groups; 
} 

Je voudrais sauver la clé et la valeur des « groupes » de mon objet et sérialiser uniquement ces deux informations. Je me demandais si c'était même possible?

Merci, Ephismen.

Répondre

2

Serializin/désérialisation XML avec Linq est très facile, je vous recommande fortement de jeter un coup d'oeil si vous ne le savez pas encore.

sérialisation ressemblera à ceci:

// add reference to System.Xml.Linq 

var xml = new XDocument(
    new XDeclaration("1.0", "utf-8", "yes"), 
    new XElement("users", 
    from pair in dic 
    select new XElement("user", 
     new XAttribute("userId", pair.Key), 
     new XAttribute("Groups", pair.Value.groups)))); 

// xml.Save(...) to save in the IsolatedStorage 

Désérialisation:

XDocument loaded = XDocument.Load(...your stream...); 

var results = from c in loaded.Descendants("users") 
     select new { 
      userIdAttribute = (string)c.Attribute("userId"), 
      groupsAttribute = (string)c.Element("Groups") 
     }; 

foreach (var user in results) 
{ 
    dic.Add(user.userIdAttribute, 
     new User() 
     { 
      name = user.userIdAttribute, 
      groups = user.groupsAttribute 
     }); 
} 

Vous pouvez trouver une bonne documentation here et quelques exemples here.

+0

Merci beaucoup, l'exemple et les liens que vous avez fournis sont très clairs et utiles. J'ai une autre question, je sais comment sauvegarder dans un stockage isolé, mais est-il possible d'obtenir le fichier et de le convertir en un document xml? ou je dois analyser comme une sorte de chaîne? – Aymeric

+0

J'ai ajouté un exemple de désérialisation. XDocument.Load prend un nom de fichier ou un flux. Si vous êtes dans le navigateur, vous ne pouvez pas accéder au système de fichiers, vous devrez donc lire/écrire depuis IsolatedStorage et obtenir un flux à partir du fichier. (est-ce que cela répond à ta question?) –

+0

Parfaitement, merci beaucoup tu as sauvé ma journée :) – Aymeric