Serialisation XML avec C#

Résolu
cs_Lhenry Messages postés 8 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 11 février 2009 - 31 oct. 2008 à 15:54
cs_Lhenry Messages postés 8 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 11 février 2009 - 6 nov. 2008 à 23:28
Bonjour à tous,
J'ai un problème avec la sérialisation de mes données dans mon application en C#...
Pour mon BTS, je dois sérialiser une série d'élement identique et je coince car quand j'ouvre mon document XML via IE ou Firefox, j'ai le message suivant :
"Un seul élément de niveau supérieur est autorisé dans un document XML"

voila le code de mon type structuré en C# :
[

Serializable]

public
struct
TRealisateur
{

//Chaque champ correspond à une information concernant un réalisateur (nom, pr‚nom...)
public
decimal tRealNum

public
string tRealNom;

public
string tRealPrenom;

public
decimal tRealNbFilm;

[
XmlAttribute(AttributeName =
"NumReal")]

public
string RealNum {
get {
return
Convert.ToString(tRealNum); }
set { tRealNum =
Convert.ToDecimal(
value); } }

[
XmlElement(ElementName =
"NomReal")]

public
string RealNom {
get {
return tRealNom; }
set { tRealNom =
value; } }[

XmlElement(ElementName =
"PrenomReal")]

public
string RealPrenom {
get {
return tRealPrenom; }
set { tRealPrenom =
value; } }[

XmlElement(ElementName =
"NbFilmReal")]

public
string RealNbFilm {
get {
return
Convert.ToString(tRealNbFilm); }
set { tRealNbFilm =
Convert.ToDecimal(
value); } }

//fonction de cr‚ation d'un r‚alisateur
public
TRealisateur CreerRealisateur(
decimal pNum,
string pNom,
string pPrenom,
decimal nbFilm){

TRealisateur monReal;
monReal.tRealPrenom = pPrenom;
monReal.tRealNum = pNum;
monReal.tRealNom = pNom;
monReal.tRealNbFilm = nbFilm;

return monReal;
}

//fonction de recherche d'un realisateur

public
int RechercherRealisateur(
List<
TRealisateur> ptabReal,
string pNom){

int i = 0;

while ((pNom != ptabReal[i].tRealNom) && (i < ptabReal.Count))
i++;

if (ptabReal[i].tRealNom == pNom)

return i;

else
return -1;
}
}
[
Serializable]

En public static de mon programme j'ai écris ces ligne :
public

static
XmlSerializer ecrire =
new
XmlSerializer(
typeof(
TRealisateur));
public

static
TextWriter writer =
new
StreamWriter(
Environment.CurrentDirectory +
"\\Fichiers\\Realisateur.xml");

Enfin pour effectuer la serialisation, j'utilise :

Program.ecrire.Serialize(
Program.writer,
Program.tabRealisateur[0]);

Program.ecrire.Serialize(
Program.writer,
Program.tabRealisateur[1]);

Program.ecrire.Serialize(
Program.writer,
Program.tabRealisateur[2]);

Or lorsque je souhaite serialiser un seul élément, le document XML est généré correctement...Si je sérialise un autre element ensuite, j'ai le message d'erreur que je vous ai donné au debut :
Un seul élément de niveau supérieur est autorisé dans un document XML. Erreur de traitement de la ressource <TRealisateur
xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" NumReal=...

<tbody></tbody>Quelqun pourrait m'aider ???
Un grand merci par avance....

5 réponses

cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
1 nov. 2008 à 10:51
Hello,
Probablement que tu n'a pas spécifié XmlRoot?
Voire http://www.csharpfr.com/codes/PERSONNALISER-SERIALIZATION-XML-AVEC-ATTRIBUTS_41632.aspx

<hr />
-My Blog-
3
cs_Lhenry Messages postés 8 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 11 février 2009
31 oct. 2008 à 16:15
Si ca peut aider je vous copie le fichier XML genéré (avec 3 realisateur) et ouvert grace au bloc note :
<?xml version="1.0"?>
<TRealisateur xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" NumReal="1">
  <tRealNum>1</tRealNum>
  <tRealNom>Spielberg</tRealNom>
  <tRealPrenom>Steven</tRealPrenom>
  <tRealNbFilm>30</tRealNbFilm>
  <NomReal>Spielberg</NomReal>
  Steven

  <NbFilmReal>30</NbFilmReal>
</TRealisateur><?xml version="1.0"?>
<TRealisateur xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" NumReal="2">
  <tRealNum>2</tRealNum>
  <tRealNom>Tarantino</tRealNom>
  <tRealPrenom>Quentin</tRealPrenom>
  <tRealNbFilm>12</tRealNbFilm>
  <NomReal>Tarantino</NomReal>
  Quentin

  <NbFilmReal>12</NbFilmReal>
</TRealisateur><?xml version="1.0"?>
<TRealisateur xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" NumReal="3">
  <tRealNum>3</tRealNum>
  <tRealNom>Fincher</tRealNom>
  <tRealPrenom>David</tRealPrenom>
  <tRealNbFilm>9</tRealNbFilm>
  <NomReal>Fincher</NomReal>
  David

  <NbFilmReal>9</NbFilmReal>
</TRealisateur>
0
cs_Lhenry Messages postés 8 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 11 février 2009
3 nov. 2008 à 16:25
Bonjour et d'abord merci de ta réponse...
Le problème que j'ai eu s'est présenté alors que j'avais spécifié XmlRoot sur ma structure mais comme je dois en enregistrer plusieurs de même type ca coince. C'est pour ca que j'ai essayé sans en specifier...
En fait dans mon programme j'enregistre mes réalisateurs dans un tableau et c'est le tableau que je dois serialiser...enfin les données contenus dans mon tableau.
Je suis passé par une serialisation en binaire ca fonctionne mais je suis decu de pas avoir reussi en Xml...J'orais bien voulu recuperer mes donnees dans un format plus pratique...
Merci quand pour votre réponse...si vous avez d'autres idées je suis preneur...
bonne soiré a vous..
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
4 nov. 2008 à 22:55
Le lien que je t'ai donné n'aide pas?
XmlArray par exemple?

En tout cas, dans cette source, il me sermble que je sérialize un tableau...
Faudrait jeter un oeil, je me rappelle plus exactement !

<hr />
-My Blog-
-My WebSite-
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Lhenry Messages postés 8 Date d'inscription mardi 8 mai 2007 Statut Membre Dernière intervention 11 février 2009
6 nov. 2008 à 23:28
Apres quelques recherche dans ton source, j'ai réussi à me construire une solution un peu plus simple et surement moin professionnelle que la tienne.
J'ai donc réussi à sérialiser une liste de données dans un fichier XML pour ensuite le deserialiser dans la liste qu j'avais au départ (Avec une listes de type : "LIST<MaStructure>").
Si vous souhaitez consulter mon code source je le commenterais en details pour en faciliter la comprehension et je vous le ferait parvenir.
Cordiallement...
PS : Merci encore à bidou pour le temps qu'il m'a accordé ! 
0
Rejoignez-nous