[C#] XML - Serialisation & reflexion (la j'en manque;p) [Résolu]

Signaler
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
-
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017
-
Bon autant dire que j'en bave avec XML

L'init passe pas :

XmlTextWriter oWriter =
new XmlTextWriter (
@"d:\test2.xml",
null);


XmlSerializer oSerializer =
new XmlSerializer(
typeof(cLanguageList));

sur la 2ème ligne, il me donne une erreur de reflection.
voici les classes à sérialiser.
Et je parle meme pô des problème de serialisation avec les Hashtable.

[System.Xml.Serialization.XmlRoot(
"Element")]



public
class cLanguage
{
[XmlAttribute(
"Name")]
public
string m_szName;

public cLanguage ()
{
m_szName =
string.Empty;
}
}


[XmlRootAttribute("PurchaseOrder", Namespace"http://www.truc.com", IsNullable
false)]

public
class cLanguageList : CollectionBase
{

public cLanguageList ()
{}



public
int Add (cLanguage _oElementToAdd)
{

return
this.List.Add (_oElementToAdd);
}



public
virtual cLanguage
this [
int index ]
{

get
{

return ( ( cLanguage )(
base.List[ index ] ) );
}



set
{

base.List[ index ] =
value;
}
}
}

----------------------------
C++ forever
C# amateur

6 réponses

Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

Vala finalement c'est réglé.
Voici une source que je viens de poser qui tente de rassembler un peu tout ce qu'on trouve sur le net et sur le forum pour sérialiser en XML meme les ArrayList ou HashTable

http://www.csharpfr.com/code.aspx?ID=35960

----------------------------
C++ forever
C# amateur
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Quelle est l'erreur? (Exception?)
Pourquoi tu passes null dans le constructeur du XmlTextWriter ?

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

le param null est pour le système d'encodage par défaut.



L'exception générée est :

{"Une erreur s'est produite lors de la réflexion du type 'QuickSampleConsole.cLanguageList'." }


lors de la construction de :

XmlSerializer oSerializer =
new XmlSerializer(
typeof(cLanguageList));



----------------------------
C++ forever
C# amateur
Messages postés
714
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
19 janvier 2017

Il rest bien la solution de la sauver à la main avec un Count et chaque elements.

Mais la question suivante, lorsque l'on serialize un objet qui contient
la liste, comment lui dire d'utiliser notre fct perso de sauvegarde ?

----------------------------
C++ forever
C# amateur
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Tu as pensé à marquer ta class comme Serializable?
Je ne vois pas l'attribut dans ton code ci-dessus !

[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
49
Si tu veux sauver à la main, t'es obligé d'utiliser un XmlWriter...
Mais la Serialization, c'est très puissant, il est capable de sauver des classes complexes qui contiennent des structures complexes comme des hashtables.

Un problème que j'ai rencontré avec le Serializer, c'est lors de référence cyclique (genre la class A référencie un object B et la class B référencie un object A).


[Pub] http://www.csharpfr.com/auteurdetail.aspx?ID=13319 [\Pub]
C# forever