2010-12-02 5 views
5

Je suis assez nouveau pour XML dans .net. Dans le cadre de ma tâche, j'ai besoin de créer la classe qui peut être sérialisée en XML. J'ai un exemple de fichier XML avec toutes les balises (la classe devrait produire du XML similaire à l'exemple de fichier XML). quelle serait la meilleure approche pour créer la classe à partir du fichier XML?Comment créer une classe C# sérialisable à partir du fichier XML

Merci d'avance !!

+0

avez-vous eu de la chance avec l'une des approches suggérées? –

+0

Oui !. J'ai réussi à utiliser l'outil xsd pour générer la classe (j'ai dû faire quelques changements pour répondre à mes exigences). – Grasshopper

+0

http://msdn.microsoft.com/fr-fr/library/system.xml.serialization.xmlserializer.aspx – Mou

Répondre

10

Vous pouvez utiliser XSD.exe pour créer un fichier .cs à partir de .xml. http://msdn.microsoft.com/en-us/library/x6c1kb0s%28VS.71%29.aspx

Sur la ligne de commande:

xsd myFile.xml 
xsd myFile.xsd 

La première ligne va générer un fichier de définition de schéma (XSD), le second fichier devrait générer un fichier .cs. Je ne suis pas sûr que la syntaxe soit exacte, mais elle devrait vous aider à démarrer.

+2

47 secondes trop vite pour moi. +1 Puis-je ajouter que '/ c' serait le bon format de sortie? –

+0

+1 pour l'approche la plus rapide :) –

-1

Voici un bon exemple de sérialisation/désérialisation d'un objet. http://sharpertutorials.com/serialization/

+1

@Grasshopper pose des questions sur la génération de classe, pas sur la sérialisation. Cela ne répond pas à la question. –

+0

Je pense que vous pourriez vous tromper là - "créer la classe qui peut être sérialisée en XML". L'exigence réelle est un peu vague. –

+0

Ma faute, j'ai posté la réponse à 3 heures du matin, avant d'aller au lit :) – Davita

4

Travailler en arrière pourrait vous aider - créez d'abord votre classe, puis sérialisez et voyez ce que vous obtenez.

Pour les classes les plus simples, c'est plutôt facile. Vous pouvez utiliser XmlSerializer pour sérialiser, comme:

 
namespace ConsoleApplication1 
{ 
    public class MyClass 
    { 
     public string SomeProperty 
     { 
      get; 
      set; 
     } 
    } 

    class Program 
    { 
     static void Main(string[] args) 
     { 
      XmlSerializer serializer = new XmlSerializer(typeof(MyClass)); 
      TextWriter writer = new StreamWriter(@"c:\temp\class.xml"); 

      MyClass firstInstance = new MyClass(); 
      firstInstance.SomeProperty = "foo"; // etc 

      serializer.Serialize(writer, firstInstance); 
      writer.Close(); 

      FileStream reader = new FileStream(@"c:\temp\class.xml", FileMode.Open); 

      MyClass secondInstance = (MyClass)serializer.Deserialize(reader); 

      reader.Close(); 
     } 
    } 
} 

Cela va écrire une représentation sérialisée de votre classe en XML à "c: \ temp \ class.xml". Vous pourriez jeter un coup d'oeil et voir ce que vous obtenez. En sens inverse, vous pouvez utiliser serializer.Deserialize pour instancier la classe de "c: \ temp \ class.xml".

Vous pouvez modifier le comportement de la sérialisation, et gérer les nœuds inattendus, etc - jetez un oeil à the XmlSerializer MSDN page par exemple.

Questions connexes