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

Windows Forms Discussion :

Serialize objet Metier > Cannot Serialize winform !


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2005
    Messages : 87
    Points : 49
    Points
    49
    Par défaut Serialize objet Metier > Cannot Serialize winform !
    Bonjour,

    C# me donne du fil à retordre à la veille d'une évaluation de labo ...

    Lorsque je veux séralizer une de mes classes métier on dirait qu'il veut sérializer avec mes users controls alors qu'il n'y a aucune référence dans ma classe métier vers mes users controls.... 1sem sur une applic et au moment de la terminer bam plus rien :/ Je rage!

    Voici le doux message:
    L'exception System.Runtime.Serialization.SerializationException n'a pas été gérée
    Message="Type 'System.Windows.Forms.UserControl' in Assembly 'System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' is not marked as serializable."
    Source="mscorlib" ...
    J'en ai rien à faire moi de sérializer mon user control. Je lui demande de sérializer simplement un obj métier ...

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Est-ce que ton objet métier a des évènements auxquels l'interface graphique est abonnée ? Si oui, l'objet a des références à l'interface graphique, via les delegates enregistrés pour l'évènement. Il faut marquer les évènements comme non-sérialisables (par défaut, la sérialisation binaire les sérialise), avec l'attribut [NonSerialized] :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [NonSerialized]
    public event EventHandler MonEvenement;

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2005
    Messages : 87
    Points : 49
    Points
    49
    Par défaut
    J'ai trouvé juste avant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        public class NotifyPropertyChangedBase : INotifyPropertyChanged
        {
            [field: NonSerialized]
            public event PropertyChangedEventHandler PropertyChanged;

    ... le genre de truc qu'il "faut savoir" ... hum ...

    Merci tomlev pour ta réponse !

  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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Haknaton Voir le message
    ... le genre de truc qu'il "faut savoir" ... hum ...
    C'est vrai que c'est pas forcément un truc auquel on pense... en fait il faut savoir qu'en interne, un évènement est implémenté comme un champ, et que la sérialisation binaire sérialise tous les champs, publics ou privés. D'ailleurs j'ai une nette préférence pour la sérialisation XML, beaucoup plus souple et donnant un résultat lisible (mais probablement moins performante)

  5. #5
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2005
    Messages
    87
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2005
    Messages : 87
    Points : 49
    Points
    49
    Par défaut
    Ca m'aurais bien fait plaisir le xml ....
    Le problème c'est que j'ai des références circulaires et je ne veux pas m'en défaire.
    C'est une hiérarchie d'objet, chaque objet contient une bidinglist d'enfants et chaque enfant contient une référence vers son parent.

    Si tu me dis comment ça peut jouer en xml je suis preneur !

  6. #6
    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 : 42
    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
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par Haknaton Voir le message
    Ca m'aurais bien fait plaisir le xml ....
    Le problème c'est que j'ai des références circulaires et je ne veux pas m'en défaire.
    C'est une hiérarchie d'objet, chaque objet contient une bidinglist d'enfants et chaque enfant contient une référence vers son parent.

    Si tu me dis comment ça peut jouer en xml je suis preneur !
    L'attribut XmlIgnore permet de ne pas sérialiser un élément, donc si tu l'appliques sur la propriété Parent, tu évites la référence circulaire. Par contre, l'inconvénient c'est qu'il ne sera pas renseigné automatiquement à la désérialisation...

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

Discussions similaires

  1. Serialisation avec CDATA => Cannot Serialize member
    Par ceinpap dans le forum Général Dotnet
    Réponses: 1
    Dernier message: 28/03/2013, 16h27
  2. Réponses: 1
    Dernier message: 12/05/2011, 14h07
  3. Objet en session avec serialize()
    Par numerodix dans le forum Langage
    Réponses: 6
    Dernier message: 13/09/2009, 23h35
  4. Réponses: 4
    Dernier message: 23/04/2006, 17h02
  5. [Sessions] Session + Serialize + Objets?
    Par Chiwawa dans le forum Langage
    Réponses: 2
    Dernier message: 28/09/2005, 20h32

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