Maison > développement back-end > C++ > Comment sérialiser et désérialiser un dictionnaire à partir de XML personnalisé sans utiliser XElement ?

Comment sérialiser et désérialiser un dictionnaire à partir de XML personnalisé sans utiliser XElement ?

Barbara Streisand
Libérer: 2025-01-04 11:56:35
original
432 Les gens l'ont consulté

How to Serialize and Deserialize a Dictionary from Custom XML Without Using XElement?

Sérialisation et désérialisation vers un dictionnaire à partir de XML personnalisé sans XElement

Lorsqu'un dictionnaire et des données XML personnalisées, comme l'exemple fourni :

<items>
  <item>
Copier après la connexion

la tâche consistant à remplir le dictionnaire avec les clés et les valeurs fournies et à le sérialiser à nouveau en XML peut être réalisée sans utiliser XElement.

Désérialisation

Une classe d'éléments temporaire peut être introduit :

public class item
{
    [XmlAttribute]
    public int id;
    [XmlAttribute]
    public string value;
}
Copier après la connexion

Un exemple de dictionnaire peut être déclaré comme ceci :

Dictionary<int, string> dict = new Dictionary<int, string>()
{
    {1,"one"}, {2,"two"}
};
Copier après la connexion

Pour désérialiser le XML dans le dictionnaire, créez un objet XmlSerializer :

XmlSerializer serializer = new XmlSerializer(typeof(item[]), 
                                 new XmlRootAttribute() { ElementName = "items" });
Copier après la connexion

Le processus de désérialisation peut alors être effectué :

var orgDict = ((item[])serializer.Deserialize(stream))
               .ToDictionary(i => i.id, i => i.value);
Copier après la connexion

Sérialisation

Pour sérialiser à nouveau le dictionnaire en XML, suivez ces étapes :

serializer.Serialize(stream, 
              dict.Select(kv=>new item(){id = kv.Key,value=kv.Value}).ToArray() );
Copier après la connexion

Alternative : Utilisation de XElement (si préféré)

Si XElement est préféré, l'approche suivante peut être utilisé :

Sérialisation

XElement xElem = new XElement(
                    "items",
                    dict.Select(x => new XElement("item",new XAttribute("id", x.Key),new XAttribute("value", x.Value)))
                 );
var xml = xElem.ToString(); //xElem.Save(...);
Copier après la connexion

Désérialisation

XElement xElem2 = XElement.Parse(xml); //XElement.Load(...)
var newDict = xElem2.Descendants("item")
                    .ToDictionary(x => (int)x.Attribute("id"), x => (string)x.Attribute("value"));
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal