IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Sérialiser un tableau à 2 dimensions


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 4
    Par défaut Sérialiser un tableau à 2 dimensions
    Bonjour à tous,

    Je rencontre une difficulté lors de la sérialisation d'un objet.
    En effet, j'ai un tableau à deux dimensions (de type Single[,]) qui ne passe pas.
    J'ai lu que lorsque l'on était confronté à ce problème la majorité des personnes le résolvait en utilisant un tableau en escalier, sauf que dans mon cas, je suis sur une appli déjà existante et très grosse donc remplacer le tableau multidimensionnel par un tableau en escalier engendrerait trop de complications et surtout (après test) trop d'erreurs à la compilation.

    Je viens donc vers vous afin de vous demander si c'est vraiment la seule solution pour sérialiser les valeurs contenues dedans ou si y'a moyen de contourner ce problème autrement.
    Je suis même prêt à mettre un bout de code directement dans le corps de la fonction juste avant la sérialisation pour mettre les valeurs du Single[,] dans un Single[][] temporaire que j'aurai créer pour l'occasion puis de le rebasculer en Single[,] juste après pour ne pas créer de conflits dans l'application. C'est vous dire à quel point je suis à court de solutions ...

    Merci d'avance de vos propositions.

  2. #2
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Bonjour

    Quel type de séralisation ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 4
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    Bonjour

    Quel type de séralisation ?
    Bonjour Bluedeep,

    Sérialisation XML.

  4. #4
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    En effet, les tableaux multidimensionels ne sont pas supportés mais les "jagged arrays" - tableaux de tableaux, ce qui revient fonctionnellement au même - le sont.

    Dans ce cas, une solution peut être de créer un sérializeur spécifique, traitant les "multimensional array" comme des "jagged array".

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 4
    Par défaut
    Citation Envoyé par Bluedeep Voir le message
    En effet, les tableaux multidimensionels ne sont pas supportés mais les "jagged arrays" - tableaux de tableaux, ce qui revient fonctionnellement au même - le sont.

    Dans ce cas, une solution peut être de créer un sérializeur spécifique, traitant les "multimensional array" comme des "jagged array".
    Et peux-tu m'expliquer brièvement ce que tu entends par "traiter les "multimensional array" comme des "jagged array"" car je ne vois pas comment coder ça ?
    Ca consiste à mettre en place une seconde classe serialisable ? Si oui, elle contiendra quoi du coup ?

    Merci de t'attarder sur mon problème!!

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Considérons ces deux classes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
     
    public class MyClass1
    {
    public String[,] MyStrings
    {
    get;
    set;
    }
    }
     
    public class MyClass2
    {
    public String[][] MyStrings
    {
    get;
    set;
    }
    }
    MyClass1 ne peut pas être sérialisée avec le XmlSerializer standard.
    MyClass2 se serialize parfaitement avec le même XmlSerializer.

    On le constate en exécutant le bout de code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    MyClass1 myClass1= newMyClass1();
    MyClass2 myClass2 = newMyClass2();
    myClass1.MyStrings = newstring[,] { { "A", "B" }, { "1", "2" } };
    myClass2.MyStrings = newstring[][] { newstring[] { "A", "B" }, newstring[] { "1", "2" } };
    XmlSerializer serializerClass1 = newXmlSerializer(typeof(MyClass1));
    XmlSerializer serializerClass2 = newXmlSerializer(typeof(MyClass2));
    Il se plante en instanciant serializerClass1.

    Donc, partant de là, deux solutions :

    - Modifier tes "MyClass1" pour qu'elles ressemblent à des "MyClass2"
    - Ou se faire un XmlSerializer "maison" capable de bosser avec "MyClass1".

    Suivant le nombre de modifications que cela implique dans ton projet, on peut choisir l'une ou l'autre.

    Si tu choisis la deuxième solution, la classe static XmlSerializableServices t'aidera en te fournissant les méthodes d'écriture et lecture des noeuds Xml.
    Tu n'as plus qu'à coder la reflection et l'instanciation des noeuds Xml.

    Lo tienes claro ?

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 4
    Par défaut
    Merci d'avoir pris le temps de me faire un exemple détaillé.

    Je vais essayer la première solution.

    Je reviendrai vers toi si problème il y a ...

    Voy a intentarlo. Gracias Amigo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sérialiser un tableau à 2 dimensions
    Par Core8 dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 03/02/2007, 10h18
  2. [tableau à 2 dimensions] association String et float
    Par LoLoSS dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/07/2004, 10h53
  3. Tableau à n dimensions
    Par youb dans le forum MFC
    Réponses: 10
    Dernier message: 13/05/2004, 14h13
  4. Passage d'un tableau à deux dimensions
    Par karl3i dans le forum C
    Réponses: 3
    Dernier message: 20/10/2003, 14h50
  5. Réponses: 23
    Dernier message: 21/08/2003, 07h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo