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 :

A propos XML et références circulaires lors la sérialisation


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Par défaut A propos XML et références circulaires lors la sérialisation
    Bonjour, j’utilise dans un projet plusieurs classes et souhaite utiliser la méthode très astucieuse et pratique de Thomas Levesque, concernant les références circulaires lors la sérialisation. [
    C#] Relation parent/enfant et sérialisation XML
    Jeudi 11 juin 2009 — Thomas Levesque dans son excelent blog (http://tomlev.wordpress.com/tag/serialisation-xml/)

    Mais voila tout se passe bien lors de la sérialisation mais la désérilisatopn ne se fait pas : Voici mes deux classes :
    La classe Lots et la Classe Soumissions_Entreprises
    La classe Soumissions_Entreprises reprend la classe Lots (voir plus bas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Public Property _MyLot As New Lots
    Dim New_Soumissions As Soumissions_Entreprises = New Soumissions_Entreprises(Projet, "Thomas est le meilleur")
     
     
       With New_Soumissions
        .IChildItem_Parent = _MyLot
       End with
        _MyLot.ListSoumissions_Entreprises(New_Soumissions)
    Alors comment désérialiser cela !!!
    La classe LOTS
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    Namespace SMPE_ELT.Lots
        <Serializable()> Public Class Lots
            Inherits Element
           #Region "Constructeurs"
    	     Public Sub New()
                MyBase.New()
            End Sub
    		  Public Sub New(ByRef Projet As Projet, ByVal name As String)
                MyBase.New(Projet, name)
                ListSoumissions_Entreprises = New ChildItemCollection(Of Lots, Soumissions_Entreprises)(Me)
                                 End Sub
    	   #End Region
            Public Property ListSoumissions_Entreprises() As ChildItemCollection(Of Lots, Soumissions_Entreprises)
            Public Function SoumissionOffre_EntreprisesExist(ByVal _New_Soumissions As Soumissions_Entreprises) As Boolean
                For Each SoumissionOffre_Entreprise As Soumissions_Entreprises In ListSoumissions_Entreprises
                    If _New_Soumissions.Entreprise.Equals(SoumissionOffre_Entreprise.Entreprise) And _New_Soumissions.Offre_LotSoumissionné.Equals(SoumissionOffre_Entreprise.Offre_LotSoumissionné) Then
                        Return True
                    End If
                Next
                Return False
            End Function
            Public Function AddSoumissionOffre_Entreprise(ByVal _New_Soumissions As Soumissions_Entreprises) As Boolean
                If Not SoumissionOffre_EntreprisesExist(_New_Soumissions) Then
                    _New_Soumissions.Offre_LotSoumissionné = Me
                    ListSoumissions_Entreprises.Add(_New_Soumissions)
                                  Return True
                Else
                                  Return False
                End If
            End Function
        End Class
    End Namespace
    La classe Soumissions_Entreprises :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    #Region "Imports"
    Imports System.Xml.Serialization
    Imports System.Globalization
    #End Region
    Namespace SMPE_ELT
        <Serializable()> Public Class Soumissions_Entreprises
            Inherits Element
            Implements IChildItem(Of Lots.Lots)
    #Region "IChildItem<Parent - Members"
            <XmlIgnore()> Public Property Offre_LotSoumissionné() As Lots.Lots 'Lots pour lesquelles l'entreprise soumissionne
    #Region "IChildItem<Parent> Members"
            Public Property IChildItem_Parent() As Lots.Lots _
                   Implements IChildItem(Of Lots.Lots).Parent
                Get
                    Return Offre_LotSoumissionné
                End Get
                Set(ByVal value As Lots.Lots)
                    Offre_LotSoumissionné = value
                End Set
            End Property
    #End Region
    #End Region
     
     
    #Region "Divers et variés"
     
    #End Region
    #Region "Constructeurs"
            Public Sub New()
                MyBase.New()
            End Sub
            Public Sub New(ByRef Projet As Projet, ByVal name As String)
                MyBase.New(Projet, name)
            End Sub
    #End Region
        End Class
    End Namespace

  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
    Je pense que le problème est du au fait que ListSoumissions_Entreprises n'est pas initialisé dans le constructeur par défaut (sans paramètres). Et comme ChildItemCollection n'a pas de constructeur par défaut, le XmlSerializer ne peut pas l'initialiser lui-même.

    Il faut donc initialiser ListSoumissions_Entreprises dans les 2 constructeurs (ou appeler un des constructeur à partir de l'autre, de façon à initialiser cette collection dans tous les cas)

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Par défaut THKS
    Merci c'est gentil, ...

    J'avais envoyé également une seconde question et ne sait ou elle est passée??

    Citation Envoyé par tomlev Voir le message
    Je pense que le problème est du au fait que ListSoumissions_Entreprises n'est pas initialisé dans le constructeur par défaut (sans paramètres). Et comme ChildItemCollection n'a pas de constructeur par défaut, le XmlSerializer ne peut pas l'initialiser lui-même.

    Il faut donc initialiser ListSoumissions_Entreprises dans les 2 constructeurs (ou appeler un des constructeur à partir de l'autre, de façon à initialiser cette collection dans tous les cas)

  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 manitas Voir le message
    J'avais envoyé également une seconde question et ne sait ou elle est passée??
    Elle est , tu peux la retrouver dans ton tableau de bord (clique sur "voir toutes les discussions suivies")

    N'oublie pas de marquer le sujet comme si le problème est réglé (bouton en bas de la page)

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 11
    Par défaut Comment faire pour le cas d'objet à plusieurs parents
    Merci pour tout Thomas; Cependant je souhaiterais savoir comment faire pour le cas courant de plusieurs parents d'un objet. Ce cas se présente en fait plus souvent qu'on ne le croies.

    Avez vous un exemple de codes ?
    MERCI encore.

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

Discussions similaires

  1. [SQL 2K5] Pb : ON DELETE CASCADE : référence circulaire
    Par n00bi dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 29/05/2006, 08h48
  2. Référence circulaire
    Par Mvu dans le forum ASP
    Réponses: 3
    Dernier message: 27/04/2006, 14h38
  3. [EXCEL] : référence circulaire à cause d'une macro
    Par repié dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 11/01/2006, 10h41
  4. [XML-XSL] références interfichiers
    Par tatiana dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 02/08/2005, 10h25
  5. [DEB] DBdesigner 4 et référence circulaire
    Par Ranbaz dans le forum DBDesigner
    Réponses: 1
    Dernier message: 13/07/2005, 17h32

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