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
394 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!

source:php.cn
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