Question

Je souhaite charger des objets XML, les manipuler (définir des valeurs, lire des valeurs), puis les sauvegarder à nouveau. Il est important pour moi d'avoir le code XML dans la structure (xsd) que j'ai créée.

Une façon de faire est d'écrire mon propre sérialiseur, mais existe-t-il une prise en charge intégrée ou un code source ouvert en C # que je peux utiliser?

Était-ce utile?

La solution

Vous pouvez générer des classes C # sérialisables à partir d'un schéma (xsd) à l'aide de xsd.exe:

xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir

Si le schéma a des dépendances (schémas inclus / importés), elles doivent toutes être incluses sur la même ligne de commande.

Autres conseils

Ce code (à partir de C # DotNet 1.0) fonctionne assez bien pour sérialiser la plupart des objets en XML. (et retour) Cela ne fonctionne pas pour les objets contenant ArrayLists, et si possible, utilisez uniquement des tableaux

using System;    
using System.IO;
using System.Text;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;


public static string Serialize(object objectToSerialize)
{
    MemoryStream mem = new MemoryStream();          
    XmlSerializer ser = new XmlSerializer(objectToSerialize.GetType());         
    ser.Serialize(mem, objectToSerialize);                      
    ASCIIEncoding ascii = new ASCIIEncoding();
    return ascii.GetString(mem.ToArray());
}        

public static object Deserialize(Type typeToDeserialize, string xmlString)
{
    byte[] bytes = Encoding.UTF8.GetBytes(xmlString);
    MemoryStream mem = new MemoryStream(bytes);         
    XmlSerializer ser = new XmlSerializer(typeToDeserialize);
    return ser.Deserialize(mem);
}

LINQ to XML est très puissant si vous l'utilisez. net 3.5, LINQ à XSD peut également vous être utile!

Utilisez le programme de ligne de commande xsd.exe fourni avec visual studio pour créer des fichiers de classe que vous pouvez utiliser dans votre projet / solution, ainsi que l'espace de noms System.Xml.Serialization (plus précisément la classe XmlSerializer) pour sérialiser / désérialiser ces classes. vers et depuis le disque.

using System.Xml.Serialization;   Cet espace de noms contient tous les attributs dont vous aurez besoin si vous souhaitez mapper votre XML sur un objet quelconque. Sinon, vous pouvez utiliser l'outil xsd.exe

fichier xsd.xsd {/ classes | / dataset} [/ element: element]              [/ language: language] [/ namespace: namespace]              [/ outputdir: répertoire] [URI: uri] qui prendra vos fichiers xsd et créera des classes c # ou vb.net.

http://msdn.microsoft.com/ en-us / library / x6c1kb0s (VS.71) .aspx

Je conviens que xsd est vraiment de la merde ... Mais ils ont créé une autre version que presque personne ne connaît. Son appelé générateur d'objets xsd. C'est la prochaine version et a beaucoup plus d'options. Il génère des fichiers à partir de XSD et fonctionne à merveille. Si vous avez un générateur de schéma comme XML spy; créez un xsd à partir de votre fichier xml et utilisez cet outil. J'ai créé des classes très très complexes en utilisant cet outil. Créez ensuite des classes partielles pour des propriétés supplémentaires \ méthodes, etc., puis, lorsque vous mettrez à jour votre schéma, vous ne faites que régénérer vos classes. Toute modification persiste dans vos classes partielles.

http://www.microsoft.com/download/ fr / details.aspx? displaylang = fr & amp; id = 7075

xsd.exe de Microsoft a beaucoup de bugs: | Essayez cette perle open source http://xsd2code.codeplex.com/

Nous avons créé un cadre capable de générer automatiquement des classes C # à partir de votre XML. C'est un modèle d'élément visuel auquel vous transmettez votre code XML et les classes sont générées automatiquement dans votre projet. En utilisant ces classes, vous pouvez créer / lire / écrire votre XML.

Vérifiez ce lien pour le modèle d'élément Framework et Visual C #: cliquez ici

Je parie que NetDataContractSerializer peut faire ce que vous voulez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top