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
Susan Sarandonoriginal
2025-01-04 06:26:40791parcourir

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>

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;
}
  1. Initialiser une instance de dictionnaire :
Dictionary<int, string> dict = new Dictionary<int, string>()
{
    { 1, "one" }, { 2, "two" }
};
  1. Créer une instance de XmlSerializer :
XmlSerializer serializer = new XmlSerializer(typeof(Item[]), new XmlRootAttribute() { ElementName = "items" });
  1. Sérialiser le dictionnaire en XML :
serializer.Serialize(stream, dict.Select(kv => new Item() { Id = kv.Key, Value = kv.Value }).ToArray());

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);

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(...);

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"));

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:
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