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

VB.NET Discussion :

Sérialisation : classe et INotify


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut Sérialisation : classe et INotify
    Bonjour à tous,

    J'ai un objet qui implémente l'interface INotify pour mon binding WPF.

    Code vb.net : 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
    20
    21
    22
    23
    <Serializable()> _
    Public Class MaClasse
        Implements INotifyPropertyChanged
     
     
        Public Event PropertyChanged As PropertyChangedEventHandler _
          Implements INotifyPropertyChanged.PropertyChanged
     
        Protected Sub NotifyPropertyChanged(ByVal info As String)
            RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(info))
        End Sub
     
     
        Protected mPropriete As String
        Public Property Propriete() As String
            Get
                Return mPropriete 
            End Get
            Set(ByVal value As String)
                mPropriete = value
                NotifyPropertyChanged("Propriete")
            End Set
        End Property

    J'ai besoin, pour sauvegarder mon projet de le sérialiser. Or à première vue, ça bloque avec mon event.

    Le type 'System.ComponentModel.PropertyChangedEventManager' dans l'assembly 'WindowsBase, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' n'est pas marqué comme sérialisable.
    J'ai essayé divers attribut, mais toujours le même problème...
    D'après ce que j'ai pu chercher sur internet, la sérialisation n'est pas possible pour les events
    Quelqu'un aurait-il une idée de comment faire ? peut être en débranchant les events ?

    Par avance, merci !

    @+

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 198
    Par défaut
    de mémoire c'est l'attribut system.xml.serialization.ignore ...

    m'enfin normalement les sub et event ne sont pas sérialisés ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    Tout d'abord, merci pour ta réponse.

    J'ai essayé avec l'attribut XmlIgnore tel que

    Code vb.net : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <XmlIgnoreAttribute()> _
        Public Event PropertyChanged As PropertyChangedEventHandler _
        Implements INotifyPropertyChanged.PropertyChanged

    Mais cela ne marche pas et j'ai toujours une erreur dessus
    L'élement XmlIgnoreAttribute ne peut pas être appliqué à PropertyChanged car il n'est pas valide dans ce type de déclaration
    edit : je préçise que j'essaie de faire une sérialisation binaire et non xml

  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 Pol63 Voir le message
    de mémoire c'est l'attribut system.xml.serialization.ignore ...
    Non, ça c'est pour la sérialisation XML...

    Pour la sérialisation binaire on peut utiliser l'attribut NonSerialized :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <NonSerialized()> _
        Public Event PropertyChanged As PropertyChangedEventHandler _
        Implements INotifyPropertyChanged.PropertyChanged
    (remarque : normalement cet attribut s'applique à un champ, pas à un évènement. Mais ici il s'agit d'un "field-like event", le compilateur génère en fait un champ de type PropertyChangedEventHandler en plus des méthodes add/remove de l'évènement)

  5. #5
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     <NonSerialized()> _
        Public Event PropertyChanged As PropertyChangedEventHandler _
        Implements INotifyPropertyChanged.PropertyChanged
    (remarque : normalement cet attribut s'applique à un champ, pas à un évènement. Mais ici il s'agit d'un "field-like event", le compilateur génère en fait un champ de type PropertyChangedEventHandler en plus des méthodes add/remove de l'évènement)
    merci de ta réponse.
    je viens de tester et j'ai toujours le même message d'erreur

    L'élement XmlIgnoreAttribute ne peut pas être appliqué à PropertyChanged car il n'est pas valide dans ce type de déclaration

  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 : 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 koyot3 Voir le message
    merci de ta réponse.
    je viens de tester et j'ai toujours le même message d'erreur

    L'élement XmlIgnoreAttribute ne peut pas être appliqué à PropertyChanged car il n'est pas valide dans ce type de déclaration
    euh... t'es sûr ? Ca semble bizarre qu'il te parle de XmlIgnoreAttribute si tu as utilisé NonSerialized

  7. #7
    Membre éclairé Avatar de koyot3
    Inscrit en
    Avril 2007
    Messages
    693
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 693
    Par défaut
    autant pour moi , j'ai fais un copie-colle trop rapide.

    mais j'ai quand même une erreur

    L'attribut NonSerailizedAttribute ne peut pas être appliqué à PropertyChanged car il n'est pas valide dans ce type de déclaration

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

Discussions similaires

  1. Sérialisation classe abstraite
    Par Itori dans le forum C#
    Réponses: 2
    Dernier message: 15/10/2009, 09h53
  2. sérialiser une classe Personne
    Par adil_aeh dans le forum Services Web
    Réponses: 6
    Dernier message: 28/03/2007, 12h35
  3. débutant XMLEncoder soucis sérialisation classes
    Par superpigeon dans le forum Format d'échange (XML, JSON...)
    Réponses: 8
    Dernier message: 26/10/2006, 14h24
  4. [C#] Comment sérialiser une classe abstraite?
    Par akkaBella dans le forum C#
    Réponses: 1
    Dernier message: 14/09/2006, 16h12
  5. Réponses: 1
    Dernier message: 28/03/2006, 22h08

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