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 :

Parser du Json - Newtonsoft.Json


Sujet :

VB.NET

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 19
    Points
    19
    Par défaut Parser du Json - Newtonsoft.Json
    Bonjour,

    J'essaye de parser le code JSON ci-dessous avec la librairie Newtonsoft.Json.

    Mon code fonctionne bien mais impossible d'avoir accès aux sous éléments en boucle.
    par exemple impossible d'atteindre la variable type dans le sous ensemble Reference

    J'arrive toutefois à lire la variable nom


    Si vous avez une idée je suis preneur merci.



    Extrait code JSON

    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
    { 
       "participants":[ 
          { 
             "nom":"PERSY",
             "num":1,
             "age":24,
             "sexe":"H",
             "Tendance":{ 
                "code":"020",
                "libelleCourt":"BAI",
                "libelleLong":"BAI"
             },
             "indicateurInedit":false,
             "nombreCourses":20,
             "nombreVictoires":2,
             "Palmares":{ 
                "gainsCarriere":4380000,
                "gainsVictoires":1710000,
                "gainsPlace":2670000,
             },         
             "Reference":{ 
                "type":"SIMPLE ",
                "rapport":84.5,
                "typeRST":"REFERENCE",
                "indicateurTendance":"+",
                "nombreIndicateurTendance":5.88,
                "date":1448643342000,
                "permutation":1,
                "favoris":false,
                "num":1
             },
             "url":"https://www.monsite.com"
          },
    ]
     }

    Code utilisé

    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
     
     
    Imports Newtonsoft.Json
    Imports Newtonsoft.Json.Linq
     
    Public Class Form1
     
        Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
     
     
            Dim json As JObject = JObject.Parse(Me.RichTextBox1.Text)
     
     
            For Each Row In json("participants")
     
                MsgBox(Row("type"))
     
     
            Next
     
     
     
     
        End Sub
     
    End class

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    Public Class JSON_result
        Public code As Integer
        Public nom As String
        Public type n As String
     
     
    End Class

  2. #2
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Ouippp, ça m’intéresse aussi car je cherche à lire les fichiers Json.
    Newtonsoft.Json, c'est une librairies gratuite ? , Il y a d'autre alternatives ?

  3. #3
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Oui Newtonsoft.Json est une librairie gratuite et c'est ce qui se fait de mieux sur le marché

    Pour lire la valeur de type, voici un exemple :
    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
    Dim json = "{""participants"":[{""nom"":""PERSY"",""num"":1,""age"":24,""sexe"":""H"",""Tendance"":{""code"":""020"",""libelleCourt"":""BAI"",""libelleLong"":""BAI""},""indicateurInedit"":false,""nombreCourses"":20,""nombreVictoires"":2,""Palmares"":{""gainsCarriere"":4380000,""gainsVictoires"":1710000,""gainsPlace"":2670000,},""Reference"":{""type"":""SIMPLE "",""rapport"":84.5,""typeRST"":""REFERENCE"",""indicateurTendance"":""+"",""nombreIndicateurTendance"":5.88,""date"":1448643342000,""permutation"":1,""favoris"":false,""num"":1},""url"":""https://www.monsite.com""},]}"
     
    	Dim obj = JObject.Parse(json)
     
    	Dim participantsChildren = obj("participants").Children()
    	Dim referenceChildren = participantsChildren("Reference").Children().ToList()
     
    	For Each item As JProperty In referenceChildren
    		item.CreateReader()
     
    		Select Case item.Name
    			Case "type"
    				Console.WriteLine(item.Value.ToString())
    				Exit Select
    			Case Else
    				Exit Select
    		End Select
    	Next
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 19
    Points
    19
    Par défaut
    Salut à tous,

    Merci beaucoup pour ton aide DotNetMatt, ton exemple fonctionne à merveille.

    Pou ma culture, peux-tu stp m'éclairer sur la signification de cette ligne de code ?


    Merci par avance

  5. #5
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    La méthode CreateReader permet de lire le JSON. En regardant le code source, on peut voir que cette méthode initialise un JTokenReader qui est converti en JsonReader.

    Juste pour info, une autre possibilité pour ton cas serait d'utiliser une déserialisation personnalisée afin de récupérer un objet ayant la même structure que ton JSON. Ensuite il suffirait de lire les propriétés de cet objet pour récupérer les valeurs. Au final, c'est juste une autre facon de procéder.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    La méthode CreateReader permet de lire le JSON. En regardant le code source, on peut voir que cette méthode initialise un JTokenReader qui est converti en JsonReader.

    Juste pour info, une autre possibilité pour ton cas serait d'utiliser une déserialisation personnalisée afin de récupérer un objet ayant la même structure que ton JSON. Ensuite il suffirait de lire les propriétés de cet objet pour récupérer les valeurs. Au final, c'est juste une autre facon de procéder.

    Salut à tous,

    DotNetMatt, merci pour toutes ces informations.

  7. #7
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 19
    Points
    19
    Par défaut
    Bonjour à tous,


    je me permets de compléter ce post car je sèche un peu !

    Je souhaite parser mon JSON pour récupérer les noms des participants dans un premier temps puis récupérer dans des colonnes la variable rapport toutes les 5 minutes sans supprimer la précédente
    afin d' avoir une vision globale.

    Mais je n'ai pas l'impression que les tableaux soient la meilleur alternative ne connaissant pas le nombre de dimension au départ.


    Avez une idée sur la solution la plus simple pour obtenir l'information de cette manière

    Participant1 Rapport 12h15 rapport 12h20 rapport 12h25.................................

    Participant2 Rapport 12h15 rapport 12h20 rapport 12h25.................................




    Merci pour vos avis,

  8. #8
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Kar2013 Voir le message
    Mais je n'ai pas l'impression que les tableaux soient la meilleur alternative ne connaissant pas le nombre de dimension au départ.
    Les tableaux, c'est préhistorique... On est en 2015 Utilise une List(Of T).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  9. #9
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Les tableaux, c'est préhistorique... On est en 2015 Utilise une List<T>.

    Merci pour ta réponse, je vais sortir de ma caverne pour trouver un exemple

  10. #10
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Au temps pour moi, je n'avais pas fait attention qu'on est sur le forum VB.NET. J'ai mis à jour mon post précédent pour utiliser la syntaxe propre à VB.NET (List(Of T)).

    L'idée c'est que T représente une classe de ton choix. Par exemple :
    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
    Public Class MaClass
     
        Public Property Prop1()
            Get
     
            End Get
            Set(ByVal value)
     
            End Set
        End Property
     
        Public Property Prop2()
            Get
     
            End Get
            Set(ByVal value)
     
            End Set
        End Property
     
    End Class
    Dans l'exemple ci-dessus, Prop1 et Prop2 seront les dimensions pour utiliser tes termes. Donc pour chaque enregistrement, il te suffira de créer une instance de cette classe, et de l'ajouter dans ta List(Of MaClass).
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  11. #11
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Au temps pour moi, je n'avais pas fait attention qu'on est sur le forum VB.NET. J'ai mis à jour mon post précédent pour utiliser la syntaxe propre à VB.NET (List(Of T)).

    Dans l'exemple ci-dessus, Prop1 et Prop2 seront les dimensions pour utiliser tes termes. Donc pour chaque enregistrement, il te suffira de créer une instance de cette classe, et de l'ajouter dans ta List(Of MaClass).
    DotNetMatt merci pour ton aide,

    Mais comme tu le sais je sors tout juste de ma grotte, dans ton système je vais être contraint de déterminer le nombre de participants (nombre de lignes) et le nombre de colonne "rapport" à l'avance

    Or ces informations varient régulièrement, impossible de les prévoir.

    Ou je me trompe totalement ?

  12. #12
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Dans ce cas tu peux avoir une propriété de type List(Of DateTime) et y stocker la valeur.

    Le plus simple ca serait que tu donnes un exemple concret de JSON pour qu'on puisse mieux se rendre compte.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  13. #13
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Dans ce cas tu peux avoir une propriété de type List(Of DateTime) et y stocker la valeur.

    Le plus simple ca serait que tu donnes un exemple concret de JSON pour qu'on puisse mieux se rendre compte.
    Tu trouveras en PJ un extrait du JSON Source.

    Le fichier source est actualisé toutes les 5mn


    Et comme je le disais plus haut, je cherche le moyen le plus simple pour stocker les noms des participants et toutes les 5 mn la valeur rapport dans la sous liste "dernierRapportReference" comme suite :


    Participant1 Rapport à 12h15 rapport à12h20 rapport à 12h25.................................

    Participant2 Rapport à 12h15 rapport à 12h20 rapport à 12h25.................................


    Le nombre de participants varie d' un json à un autre.



    Je vous laisse me dire qu'elle est la structure de stockage la plus simple.

    Merci
    Fichiers attachés Fichiers attachés

  14. #14
    Membre à l'essai
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 19
    Points
    19
    Par défaut
    Bonjour à tous,

    Je me permets de relancer le sujet pour des avis complémentaires sur la meilleure alternative de stockage des données?

    Merci,

  15. #15
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,
    DotNetMatt l'a suggéré dans un post et à mon avis c'est la solution la plus simple à mettre en oeuvre : la désérialisation. Cela te retournera la liste des participants et toutes les informations contenues dans ton fichier json dans des classes. Tu stockes alors les infos qui t'intéressent dans un dictionary de participants. L'avantage de cette méthode c'est que si demain tu veux récupérer d'autres infos, tu n'auras pas beaucoup de modif à faire.

    Donc pour chaque nouveau fichier :
    - Désérialiser le json dans une classe. Cette classe contiendra donc entre autre la liste des participants du fichier Json,
    - Lire cette liste et pour chaque participant, stocker les nouvelles infos dans Dictionnary de participants (La clé pourra être le numPmu s'il est unique ou le nom du participant) : dictionary(Of String, list(Of ...)). Bien sur si le participant n'existe pas dans le dictionnary, tu l'ajoutes.

    En passant ton fichier dans un générateur de Class depuis un Json, j'ai obtenu ceci :
    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    Public Class Robe
            Public Property code As String
            Public Property libelleCourt As String
            Public Property libelleLong As String
        End Class
     
        Public Class GainsParticipant
            Public Property gainsCarriere As Integer
            Public Property gainsVictoires As Integer
            Public Property gainsPlace As Integer
            Public Property gainsAnneeEnCours As Integer
            Public Property gainsAnneePrecedente As Integer
        End Class
     
        Public Class DernierRapportDirect
            Public Property typePari As String
            Public Property rapport As Double
            Public Property typeRapport As String
            Public Property indicateurTendance As String
            Public Property nombreIndicateurTendance As Double
            Public Property dateRapport As Object
            Public Property permutation As Integer
            Public Property favoris As Boolean
            Public Property numPmu1 As Integer
        End Class
     
        Public Class DernierRapportReference
            Public Property typePari As String
            Public Property rapport As Double
            Public Property typeRapport As String
            Public Property indicateurTendance As String
            Public Property nombreIndicateurTendance As Double
            Public Property dateRapport As Object
            Public Property permutation As Integer
            Public Property favoris As Boolean
            Public Property numPmu1 As Integer
        End Class
     
        Public Class Participant
            Public Property nom As String
            Public Property numPmu As Integer
            Public Property age As Integer
            Public Property sexe As String
            Public Property race As String
            Public Property statut As String
            Public Property oeilleres As String
            Public Property proprietaire As String
            Public Property entraineur As String
            Public Property driver As String
            Public Property driverChange As Boolean
            Public Property robe As Robe
            Public Property indicateurInedit As Boolean
            Public Property musique As String
            Public Property nombreCourses As Integer
            Public Property nombreVictoires As Integer
            Public Property nombrePlaces As Integer
            Public Property nombrePlacesSecond As Integer
            Public Property nombrePlacesTroisieme As Integer
            Public Property gainsParticipant As GainsParticipant
            Public Property nomPere As String
            Public Property nomMere As String
            Public Property jumentPleine As Boolean
            Public Property engagement As Boolean
            Public Property handicapDistance As Integer
            Public Property poidsConditionMonteChange As Boolean
            Public Property dernierRapportDirect As DernierRapportDirect
            Public Property dernierRapportReference As DernierRapportReference
            Public Property urlCasaque As String
            Public Property deferre As String
        End Class
     
        Public Class SpriteCasaque
            Public Property heightSize As Integer
            Public Property url As String
            Public Property originalSize As Boolean
        End Class
     
        Public Class Example
            Public Property participants As Participant()
            Public Property ecuries As Object()
            Public Property spriteCasaques As SpriteCasaque()
            Public Property cached As Boolean
        End Class
    Pour la désérialisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim output As String
    output = File.ReadAllText(...)
    Dim myExample As Example
    myExample = JsonConvert.DeserializeObject(Of Example)(output)
    Je l'ai tester en C# mais je suppose qu'en VB.net ça doit fonctionner aussi.
    J'espère avoir été assez clair...

  16. #16
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Merci pour toutes ces infos,
    J'ai trouvé ceci comme générateur de class si ça peux aider :
    http://jsonutils.com/

  17. #17
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    J'ai un petit soucis personnellement. Il semblerait que NewtonsoftJson ne reconnait pas l'attribut XMLElement puisque ça me retourne Nothing sur cette Propriété :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       <XmlElement("class")>
    Public Property class1 As String

  18. #18
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Json.net ne permet pas (que je sache) de faire de la sérialisation XML. Essaye plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <JsonProperty("class")>
    Public Property class1 As String

  19. #19
    Membre averti
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2012
    Messages
    640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2012
    Messages : 640
    Points : 372
    Points
    372
    Par défaut
    Autant pour moi, j'avais oublié qu'on était sur du Json
    Merci pour l'info.

Discussions similaires

  1. Parser des entiers avec JSON
    Par natalie75 dans le forum Android
    Réponses: 0
    Dernier message: 25/04/2015, 17h43
  2. [Débutant] probleme avec newtonsoft.json.dll
    Par marooh dans le forum Visual Studio
    Réponses: 1
    Dernier message: 24/07/2012, 15h05
  3. Parser String[][][] en flux json
    Par Nicolas74100 dans le forum Langage
    Réponses: 3
    Dernier message: 03/10/2010, 01h06
  4. [JSON] Extension JSON disponible sur free.fr ?
    Par castrogne dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 26/05/2007, 21h49

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