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érialisation et Désérialisation d'une classe static


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Par défaut Sérialisation et Désérialisation d'une classe static
    Bonjour,

    Je cherche à Sérialisé et Désérialisé une classe static (avec des membres static aussi).

    La classe est sous cette forme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public static class A
    {
    public static UInt32            m_uMember00;
    public static List< UInt32 >  m_oMember01;
    public static ClassB            m_oMember02;
    public static List< Class C > m_oMember03;
    }
    Habituellement je sérialise comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    FileStream		oFile		= File.Open( sFilename, FileMode.OpenOrCreate );
    XmlSerializer	oSerializer	= new XmlSerializer( typeof( ClassObject ) );
     
    oSerializer.Serialize( oFile, oObject );
    oFile.Close();
    Et pour la désérialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    FileStream		oFile		= File.Open( sFilename, FileMode.Open );
    XmlSerializer	oSerializer	= new XmlSerializer( typeof( List<Sprite> ) );
    oObject	= ( ClassObject )oSerializer.Deserialize( oFile );
    oFile.Close();
    Par contre mes méthodes standard ne fonctionne pas avec des classes statiques. Quelle est la procédure à suivre ?

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Ca n'a pas de sens de vouloir faire ça... La sérialisation, c'est pour persister des objets (donc des instances), et une classe statique, par définition, n'a pas d'instance.

    De toutes façons, une classe statique avec des données, c'est généralement une mauvaise idée... as-tu vraiment besoin que cette classe soit statique ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    au pire fais un singleton

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par giova_fr Voir le message
    au pire fais un singleton
    J'y avais pensé aussi, mais en fait non... un singleton n'a pas de constructeur public, donc la sérialisation XML ne fonctionnera pas.

  5. #5
    Membre éclairé Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Par défaut
    Je suis plus habitué au concept du C++, où le mot clef static est là pour assuré "l'unicité de l'instance", une et une seule instance. Mais il semblerait qu'en C# ce mot est plusieurs sens.

    Je me suis tourné vers solution pour résoudre le problème suivant.
    j'ai plusieurs type, A, B, C, D... Tous ces types sont instanciés dans ma classe static "GameData".
    GameData contient juste des listes de A, B, C, D...
    Le problème c'est que :
    B contient une référence vers A
    C contient une référence vers A
    D contient une référence vers B et C
    ...
    Et lorsque je faisait la sérialisation des éléments static de GameData (AList.xml, BList.xml, CList.xml, DList.xml...)
    Et bien le vrai problème est que:
    DList.xml contient des instances de B et C
    CList.xml contient des instances de A
    BList.xml contient des instances de A

    Ce qui multiplie mes données.

    Comment pourrais-je résoudre ce problème autrement ?

    Merci

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    revois tout

    tu pourrais pour ton probleme de donnée redondante, ajouter un champ Guid à tes objets, et au lieu de sérialiser une liste de reference vers des objets, tu sérialise une liste de Guid. De cette facon par exemple, DList.xml ne contiendrait que le Guid de A et le Guid de B.

    Sinon static est une notion de programmation objet, c'est donc la meme chose que ce soit pour le C++ ou du c#, c'est stocker une fois dans la classe au lieu d'etre stocké à chaque fois dans les instances d'objets. Son but est donc précis : partager une donnée commune à toutes les instance de la classe.

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

Discussions similaires

  1. Compiler une classe static à la volée
    Par cylere dans le forum Général Java
    Réponses: 0
    Dernier message: 02/02/2012, 18h14
  2. sérialiser un objet d'une classe du framework
    Par anat1212 dans le forum VB.NET
    Réponses: 1
    Dernier message: 31/10/2010, 00h01
  3. Déclarer une classe Static
    Par remibeginer dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/05/2008, 16h00
  4. Réponses: 4
    Dernier message: 27/07/2007, 20h34
  5. [Info] variable d'une classe static
    Par romdelf dans le forum Langage
    Réponses: 21
    Dernier message: 06/12/2005, 15h08

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