Serialisation XML avec C# [Résolu]

cs_Lhenry 8 Messages postés mardi 8 mai 2007Date d'inscription 11 février 2009 Dernière intervention - 31 oct. 2008 à 15:54 - Dernière réponse : cs_Lhenry 8 Messages postés mardi 8 mai 2007Date d'inscription 11 février 2009 Dernière intervention
- 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....
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 1 nov. 2008 à 10:51
3
Merci
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-

Merci cs_Bidou 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 117 internautes ce mois-ci

Commenter la réponse de cs_Bidou
cs_Lhenry 8 Messages postés mardi 8 mai 2007Date d'inscription 11 février 2009 Dernière intervention - 31 oct. 2008 à 16:15
0
Merci
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>
Commenter la réponse de cs_Lhenry
cs_Lhenry 8 Messages postés mardi 8 mai 2007Date d'inscription 11 février 2009 Dernière intervention - 3 nov. 2008 à 16:25
0
Merci
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..
Commenter la réponse de cs_Lhenry
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 4 nov. 2008 à 22:55
0
Merci
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-
Commenter la réponse de cs_Bidou
cs_Lhenry 8 Messages postés mardi 8 mai 2007Date d'inscription 11 février 2009 Dernière intervention - 6 nov. 2008 à 23:28
0
Merci
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é ! 
Commenter la réponse de cs_Lhenry

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.