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

Comment sérialiser et désérialiser un dictionnaire en XML personnalisé sans utiliser XElement ?

Susan Sarandon
Libérer: 2025-01-04 06:26:40
original
804 Les gens l'ont consulté

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

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

Considérez un scénario dans lequel vous disposez d'un dictionnaire et vous devez le sérialiser et le désérialiser à partir d'un format XML personnalisé comme celui-ci :

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

Pour réaliser cette sérialisation et désérialisation sans utiliser XElement :

Sérialisation

  1. Créer un élément temporaire class :
public class Item
{
    [XmlAttribute]
    public int Id;
    [XmlAttribute]
    public string Value;
}
Copier après la connexion
  1. Initialiser une instance de dictionnaire :
Dictionary<int, string> dict = new Dictionary<int, string>()
{
    { 1, "one" }, { 2, "two" }
};
Copier après la connexion
  1. Créer une instance de XmlSerializer :
XmlSerializer serializer = new XmlSerializer(typeof(Item[]), new XmlRootAttribute() { ElementName = "items" });
Copier après la connexion
  1. Sérialiser le dictionnaire en XML :
serializer.Serialize(stream, dict.Select(kv => new Item() { Id = kv.Key, Value = kv.Value }).ToArray());
Copier après la connexion

Désérialisation

  1. Désérialiser le XML en un tableau d'objets Item :
var orgDict = ((Item[])serializer.Deserialize(stream))
               .ToDictionary(i => i.Id, i => i.Value);
Copier après la connexion

Alternative utilisant XElement

Si vous décidez plus tard d'utiliser XElement, voici comment sérialiser et désérialiser :

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