[c#] There was an error generating the XML

There was an error generating the XML [c#] - C#/.NET managed - Programmation

Marsh Posté le 15-11-2003 à 17:37:18    

J'obtiens cette erreur lorsque je tente d'"XMLSerializer" mes données. Cette exception est une InvalidCastException, je cherche à determiner sur quel élément de la classe se produit le problème de cast.  
 
structure des données :
[

Code :
  1. System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
  2. public class Classe{
  3. [System.Xml.Serialization.XmlElementAttribute("Eleve", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
  4.    public ArrayList _eleves;
  5. [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
  6.    public String _niveau;
  7. ...blabla...}


 

Code :
  1. public class Eleve{
  2. [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
  3.     public String _nom;
  4. [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
  5.     public String _prenom;
  6. [System.Xml.Serialization.XmlElementAttribute("Notes", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
  7.     public ArrayList _notes;
  8. ...blabla...}


 
serialisation :

Code :
  1. classeFile = new StreamWriter( url );
  2. XmlSerializer classeSerializer=new XmlSerializer(typeof(Classe));
  3. classeSerializer.Serialize(classeFile, this );


 
une idée?


Message édité par prettysmile le 17-11-2003 à 19:55:03
Reply

Marsh Posté le 15-11-2003 à 17:37:18   

Reply

Marsh Posté le 16-11-2003 à 00:28:10    

c'est quoi cette signature :heink:


---------------
J'ai un string dans l'array (Paris Hilton)
Reply

Marsh Posté le 16-11-2003 à 02:03:36    

:lol:

Reply

Marsh Posté le 16-11-2003 à 10:44:07    

Harkonnen a écrit :

c'est quoi cette signature :heink:


demande à Drashe!

Reply

Marsh Posté le 17-11-2003 à 13:48:23    

je jetterai ptet un coup d'oeil ce soir si personne n'a encore répondu

Reply

Marsh Posté le 17-11-2003 à 18:43:31    

HappyHarry a écrit :

je jetterai ptet un coup d'oeil ce soir si personne n'a encore répondu

trop aimable :jap:

Reply

Marsh Posté le 17-11-2003 à 19:25:48    

tu as précisé qu'il fallait inclure le type Eleve en mettant  
 
[XmlInclude(typeof(Eleve))]
 
dans la déclaration de la classe Classe ?
 
autre truc a savoir : XmlSerializer ne traite que les types public ...


Message édité par HappyHarry le 17-11-2003 à 19:30:05
Reply

Marsh Posté le 17-11-2003 à 19:54:42    

HappyHarry a écrit :

tu as précisé qu'il fallait inclure le type Eleve en mettant  
 
[XmlInclude(typeof(Eleve))]
 
dans la déclaration de la classe Classe ?
 
autre truc a savoir : XmlSerializer ne traite que les types public ...


à vrai dire non, je me suis contentée des balises suggérées par xsd.  
 
un rapide test ne me donne rien avec xmlInclude.
passer les attributs en public, je l'ai déjà fait apres de qques docs (dsl oublié de mettre post à jour)

Reply

Marsh Posté le 17-11-2003 à 19:57:53    

chez moi le code suivant fonctionne, donc a part le writer que j'ai utilisé qui semble être différent ...
 

Code :
  1. using System;
  2. using System.Collections;
  3. using System.IO;
  4. using System.Xml;
  5. using System.Xml.Serialization;
  6. namespace ConsoleApplication1
  7. {
  8. class Class1
  9. {
  10.  [STAThread]
  11.  static void Main(string[] args)
  12.  {
  13.   try
  14.   {
  15.    XmlTextWriter writer = new XmlTextWriter("C:\\\\toto.xml",System.Text.Encoding.Default);
  16.    XmlSerializer classeSerializer=new XmlSerializer(typeof(Classe));
  17.    classeSerializer.Serialize(writer, Classe.GetClasseSample() );
  18.   }
  19.   catch(Exception e)
  20.   {
  21.    Console.WriteLine(e.Message);
  22.    if(e.InnerException != null)
  23.     Console.WriteLine(e.InnerException.Message);
  24.   }
  25.   finally
  26.   {
  27.    Console.WriteLine("Fin." );
  28.    Console.ReadLine();
  29.   }
  30.  }
  31. }
  32. [System.Xml.Serialization.XmlRootAttribute(Namespace="", IsNullable=false)]
  33. [XmlInclude(typeof(Eleve))]
  34. public class Classe
  35. {
  36.  [System.Xml.Serialization.XmlElementAttribute("Eleve", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
  37.  public ArrayList _eleves;
  38.  [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
  39.  public String _niveau;
  40.  public Classe()
  41.  {
  42.   this._eleves = new ArrayList();
  43.   this._niveau = "";
  44.  }
  45.  public Classe(string niveau, Eleve toto)
  46.  {
  47.   this._niveau = niveau;
  48.   this._eleves = new ArrayList();
  49.   this._eleves.Add(toto);
  50.  }
  51.  public static Classe GetClasseSample()
  52.  {
  53.   return new Classe("CP",Eleve.GetEleveSample());
  54.  }
  55. }
  56. public class Eleve
  57. {
  58.  [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
  59.  public String _nom;
  60.  [System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
  61.  public String _prenom;
  62.  [System.Xml.Serialization.XmlElementAttribute("Notes", Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
  63.  public ArrayList _notes;
  64.  public Eleve()
  65.  {
  66.   this._nom = "";
  67.   this._prenom = "";
  68.   this._notes = new ArrayList();
  69.  }
  70.  public Eleve(string nom, string prenom, ArrayList notes)
  71.  {
  72.   this._nom = nom;
  73.   this._prenom = prenom;
  74.   this._notes = notes;
  75.  }
  76.  public static Eleve GetEleveSample()
  77.  {
  78.   return new Eleve("DUGLAND","Toto",null);
  79.  }
  80. }
  81. }


Message édité par HappyHarry le 17-11-2003 à 19:59:06
Reply

Marsh Posté le 17-11-2003 à 20:05:29    

avec le XmlWriter ça marche.
Srteamwriter c'était la solution proposée dans la formation microsoft, je vais essayer d'approfondir pour comprendre pourquoi cela ne fonctionne sur mon code (à peine plus etoffé que leur exemple : un Zoo avec une arrayList d'Animaux)
 :jap:  :jap:  :jap:  [:prettysmile]


Message édité par prettysmile le 17-11-2003 à 20:05:49
Reply

Marsh Posté le 17-11-2003 à 20:05:29   

Reply

Marsh Posté le 17-11-2003 à 20:07:04    

[:spamafote]

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed