Sérialisation d'une ArrayList [Résolu]

Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
- - Dernière réponse : cs_Bilou972
Messages postés
25
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
24 novembre 2008
- 12 déc. 2007 à 18:25
Bonjour,

J'ai un petit problème quand j'essaie de sérialiser une ArrayList. Apparemment, les objets contenus dans la liste sont d'un type inattendu. J'ai essayé de mettre un XmlInclude pour spécifier le type des objets, mais ca ne change rien.

    [XmlInclude(typeof(Classe))]
    class Program
    {
        static void Main(string[] args)
        {
            ArrayList l = new ArrayList();
            l.Add(new Classe(2));
            l.Add(new Classe(3));
            l.Add(new Classe(4));

            System.IO.StringWriter oWriter = new System.IO.StringWriter();
            XmlSerializer serializer = new XmlSerializer(l.GetType());
            serializer.Serialize(oWriter, l);
            Console.WriteLine(oWriter.ToString());
        }
    }

La classe des objets que je veux sérialiser:

   public class Classe
    {
        private int x;

        public int X
        {
            get { return x; }
            set { x = value; }
        }

        public Classe(int x)
        {
            this.x = x;
        }

        private Classe()
        {
        }
    }

Merci de votre aide

_____________________________________
Un éditeur de ressources gratuit pour Windows
Afficher la suite 

4 réponses

Meilleure réponse
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42
3
Merci
Salut,
Essayes quelques choses comme ceci:

public

class
Program
{
  
public
static
void Main(
string[] args)
   {
     
ArrayList al =
new
ArrayList();
      al.Add(
new
Classe(2));
      al.Add(
new
Classe(3));
      al.Add(
new
Classe(4));

     
StringWriter oWriter =
new
StringWriter();
     
XmlSerializer serializer =
new
XmlSerializer(
typeof(
ArrayList),
new
Type[] {
typeof(
Classe) });
      serializer.Serialize(oWriter, al);
     
Console.WriteLine(oWriter.ToString());
   }
}

[
Serializable()]

public
class
Classe
{
  
private
int _x = 0;

  
private Classe()
   {
   }

  
public Classe(
int x)
   {
     
this._x = x;
   }

  
public
int X
   {
     
get {
return
this._x; }
     
set {
this._x =
value; }
   }
}

<hr size="2" />-Blog-

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 198 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
42
3
Merci
Ceci étant certainement du au fait que le Serializer ne sait pas à quoi s'attendre avec le type ArrayList, il faut donc lui spécifier "manuellement".
Remarque qu'avec .NET2 on préférera faire une collection typée et donc d'avoir qqch du genre :

List<Classe> al = new List<Classe>();
al.Add(newClasse(2));
al.Add(newClasse(3));
al.Add(newClasse(4));

StringWriter oWriter = newStringWriter();
XmlSerializer serializer = newXmlSerializer(typeof(List<Classe>)):
Console.WriteLine(oWriter.ToString());

<hr size="2" />-Blog-

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 198 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Bidou
Messages postés
6539
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
0
Merci
J'avais essayé avec une LinkedList<Classe> et ca ne marchait pas, mais avec List<Classe> ca marche bien
Ta première réponse me convient aussi, mais je prends la seconde :)
Merci beaucoup!

_____________________________________
Un éditeur de ressources gratuit pour Windows
Commenter la réponse de vecchio56
Messages postés
25
Date d'inscription
samedi 6 septembre 2003
Statut
Membre
Dernière intervention
24 novembre 2008
0
Merci
Bonjour,

Bidou, j'ai vu que tu as répondu a plusieurs posts sur le sujet,
effectivement pour sérialiser une arraylist d' objets de type primitif
(string, int) pas de probleme par contre j'essaie en vain de serialiser
une arrayList d'objet de monType.

J'obtiens l'erreur suivante,

The remote server returned an error: (500) Internal Server Error.
There was an error reflecting type 'System.Collections.ArrayList'.

 en utilisant le code suivant.
[Serializable]public class ressource
    {
        int id;
        public String libelle;
       
        public ressource(String _libelle)
        {
        libelle=_libelle;
        }
       
        public virtual String affichage(){
      
          return "id : "+id+" libelle : "+libelle;
        }
    }

Autre part dans le code
ArrayList al = new ArrayList();
            al.Add(new salle("EB28",40));
            al.Add(new salle("info4",40));
            al.Add(new salle("eh2",40));

            StringWriter oWriter = new StringWriter();
            XmlSerializer serializer = new XmlSerializer(typeof(ArrayList), new Type[] { typeof(ressource) });
            serializer.Serialize(oWriter, al);
            Console.WriteLine(oWriter.ToString());
            return "Hello World";

Je précise que salle hérite de ressource et que salle est aussi sérialisable.

Je vois que tu fais une liste fortement typée, ce que je
n'ai pas pu faire. Je travaille avec monodevelop sous Kubuntu.

Je n'ai pa vu de balises code désolé pour les couleurs.

Le bruit ne fait pas de bien
Le bien de fait pas de bruit
Commenter la réponse de cs_Bilou972