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 :

Fonctionnement JsonConvert.DeserializeObject dans vb dotnet visual studio 2019


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 90
    Points
    90
    Par défaut Fonctionnement JsonConvert.DeserializeObject dans vb dotnet visual studio 2019
    Bonjour,

    Je récupère un fichier JSON très simple que je désirerais désérialiser. Je suis tombé sur JsonConvert de Newtonsoft.Json. Par contre, je n'ai pas vraiment trouvé de l'aide pour comprendre comment la machinerie fonctionne. Voici des extraits du code (je mets le minimum nécessaire pour ne pas encombrer la lecture).
    Le but étant de remplir le tableau TFA qui sera après exploité pour l'affichage, (mais aussi un test d'heure de mise en ligne pour déceler les pannes)

    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
    Imports Newtonsoft.Json
    
    Module mdl_Alertes
        ...
        Public Const sMesDoc As String = "D:\Cloud\Google Drive\meteo\SurvMeteo\datas\"
    
        Structure ST_TFA
            Dim Loc As String 'localisation
            Dim Dt As Date ' Date et heure comme  2021-07-24 10:55
            Dim Temp As Single ' Température
            Dim Hum As Integer ' humidité
        End Structure
    
        Public Class cl_TFA_JSON
            Public Property Loc As String
            Public Property Dt As String
            Public Property t As Double
            Public Property hm As Integer
        End Class
    
        Sub LectureJson()
            Dim sNom As String
            Dim sLigne As String
            Dim TFA(7) As ST_TFA ' de 0 à 7 = les 8 thermomètres
            sNom = sMesDoc & "tfa.json"
    
            Dim FileReader = My.Computer.FileSystem.OpenTextFileReader(sNom)
            sLigne = FileReader.ReadLine
            FileReader.Close()
            Dim sJSON = JsonConvert.DeserializeObject(Of  ???  )(sLigne)
           
            'c'est quoi le paramètre de « Of » et puis après, comment je fais ?
    
        End Sub
    End Module
    Merci d'avance pour votre aide,
    Blaise


    Voici un exemple de fichier : « [{"Loc":"Extérieur","Dt":"2021-07-24 11:20","t":20.8,"hm":72},{"Loc":"Salon","Dt":"2021-07-24 11:20","t":22.7,"hm":66},{"Loc":"Chambre","Dt":"2021-07-24 11:20","t":21.9,"hm":70},{"Loc":"Bureau","Dt":"2021-07-24 11:20","t":23.6,"hm":61},{"Loc":"Buanderie","Dt":"2021-07-24 11:20","t":24.2,"hm":66},{"Loc":"Serre","Dt":"2021-07-24 11:20","t":27.1,"hm":74},{"Loc":"Garage","Dt":"2021-07-24 11:20","t":22.8,"hm":65},{"Loc":"Sdb Haut","Dt":"2021-07-24 11:20","t":24.1,"hm":62}] »

    Soit :
    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
    [
      {
        "Loc": "Extérieur",
        "Dt": "2021-07-24 11:20",
        "t": 20.8,
        "hm": 72
      },
      {
        "Loc": "Salon",
        "Dt": "2021-07-24 11:20",
        "t": 22.7,
        "hm": 66
      },
      {
        "Loc": "Chambre",
        "Dt": "2021-07-24 11:20",
        "t": 21.9,
        "hm": 70
      },
      {
        "Loc": "Bureau",
        "Dt": "2021-07-24 11:20",
        "t": 23.6,
        "hm": 61
      },
      {
        "Loc": "Buanderie",
        "Dt": "2021-07-24 11:20",
        "t": 24.2,
        "hm": 66
      },
      {
        "Loc": "Serre",
        "Dt": "2021-07-24 11:20",
        "t": 27.1,
        "hm": 74
      },
      {
        "Loc": "Garage",
        "Dt": "2021-07-24 11:20",
        "t": 22.8,
        "hm": 65
      },
      {
        "Loc": "Sdb Haut",
        "Dt": "2021-07-24 11:20",
        "t": 24.1,
        "hm": 62
      }
    ]

  2. #2
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2018
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2018
    Messages : 274
    Points : 237
    Points
    237
    Par défaut
    Bonjour,

    voici un exemple pour le ton fichier 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
    Imports System.IO
    Imports Newtonsoft.Json
     
    Dim Filepath As String = Path.Combine(My.Computer.FileSystem.SpecialDirectories.Desktop, "teste.json")
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
            Dim json As String = File.ReadAllText(Filepath)
            Dim sJSON() As TFA = JsonConvert.DeserializeObject(Of TFA())(json)
            For Each item As TFA In sJSON
                Dim lv As New ListViewItem(item.Loc)
                lv.SubItems.Add(item.Dt)
                lv.SubItems.Add(item.t)
                lv.SubItems.Add(item.hm)
                ListView1.Items.Add(lv)
            Next
        End Sub
    Friend Class TFA
        Public Property Loc As String
        Public Property Dt As String
        Public Property t As Double
        Public Property hm As Integer
    End Class
    voici en image :
    Nom : fichier json.PNG
Affichages : 161
Taille : 16,6 Ko
    cordialement,

  3. #3
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 90
    Points
    90
    Par défaut
    Ok, merci beaucoup, je vais regarder cela de près

  4. #4
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 90
    Points
    90
    Par défaut
    Bonjour Miska59

    Cela ne fonctionne pas correctement.
    Je précise le contexte : ce fichier vient de mon serveur météo et dont le 1er objectif est de tester les dates et heures pour lancer une alerte sonore s'il y a un dysfonctionnement dans la chaine de construction (Arduino) ou de transmission. Mais tant qu'à faire, aussi afficher les valeurs comme tu l'as fait.
    Il y a aussi un autre fichier pour ma page météo.

    J'ai placé toutes les routines dans un module, mais cela ne devrait pas poser problème. Le code :
    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
        Friend Class TFA
            Public Property Loc As String
            Public Property Dt As String
            Public Property t As Double
            Public Property hm As Integer
        End Class
     
        Sub LectureJson()
            Dim sNom As String = Path.Combine(sMesDoc, "tfa.json")
            Dim sLigne As String = File.ReadAllText(sNom)
            Form1.ListView1.Clear() 'parce que lecture toutes les 5 minutes
            Dim sJSON() As TFA = JsonConvert.DeserializeObject(Of TFA())(sLigne)
            For Each item As TFA In sJSON
                Dim lv As New ListViewItem(item.Loc)
                lv.SubItems.Add(item.Dt)
                lv.SubItems.Add(item.t)
                lv.SubItems.Add(item.hm)
                Form1.ListView1.Items.Add(lv)
            Next
        End Sub
    Ce qui donne :

    Nom : 2021.07.26 09.490001 PC-POLLUX.png
Affichages : 138
Taille : 8,8 Ko

    Mais la string sLigne (json) contient « "[{""Loc"":""Extérieur"",""Dt"":""2021-07-26 09:50"",""t"":18.9,""hm"":97},{""Loc"":""Salon"",""Dt"":""2021-07-26 09:50"",""t"":22.6,""hm"":71},{""Loc"":""Chambre"",""Dt"":""2021-07-26 09:50"",""t"":22.6,""hm"":75},{""Loc"":""Bureau"",""Dt"":""2021-07-26 09:50"",""t"":23.6,""hm"":67},{""Loc"":""Buanderie"",""Dt"":""2021-07-26 09:50"",""t"":23.1,""hm"":76},{""Loc"":""Serre"",""Dt"":""2021-07-26 09:50"",""t"":21.3,""hm"":97},{""Loc"":""Garage"",""Dt"":""2021-07-26 09:50"",""t"":22.1,""hm"":73},{""Loc"":""Sdb Haut"",""Dt"":""2021-07-26 09:50"",""t"":23.7,""hm"":70}]" & vbCrLf »

    Cependant les visualisations texte et json sont correctes. Faut-il préparer quelque chose au niveau du ListView ?

    Nom : 2021.07.26 10.060002 PC-POLLUX.png
Affichages : 138
Taille : 12,5 KoNom : 2021.07.26 10.060003 PC-POLLUX.png
Affichages : 134
Taille : 7,7 Ko

  5. #5
    Membre régulier
    Homme Profil pro
    Touche à tout
    Inscrit en
    Mars 2009
    Messages
    120
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Touche à tout

    Informations forums :
    Inscription : Mars 2009
    Messages : 120
    Points : 90
    Points
    90
    Par défaut
    Bonjour,

    Et merci. Je peux clôturer

    Je suis un peu vieux jeu : je viens du QBasic, QuickBasic, Visual Basic 1 à 6, j'utilise encore VBA (VB6) ...
    Mais je ne suis pas fermé aux nouveautés et à d'autres langages comme C++, C#, Python, ... Et j'avais oublié que j'avais déjà utilisé la désérialisation pour mon App Android


    Bon donc, j'ai utilisé un RichTextBox (cela me permet une mise en forme avec des VbTab). Mais ceci dit, c'est surtout pour savoir si cela fonctionne bien, car j'ai des graphes sur 25 heures (voir tout en bas)

    J'ai gardé mon système de fichiers (une bibliothèque en moins)

    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
        Function LectureJson() As Date
            Dim sNom As String = sMesDoc & "tfa.json"
            Dim sLigne As String
            Dim Tbl_TFA(7) As ST_TFA
            Dim MaxDateJson As Date
            Form1.RichTextBox1.Text = "" 'parce que lecture toutes les 5 minutes
            Dim FileReader = My.Computer.FileSystem.OpenTextFileReader(sNom)
            sLigne = FileReader.ReadLine
            FileReader.Close()
            Dim JSON = JsonConvert.DeserializeObject(Of TFA())(sLigne)
            Dim i As Integer = 0
            For Each item As TFA In JSON
                Tbl_TFA(i).Loc = item.Loc
                Tbl_TFA(i).Dt = Convert.ToDateTime(item.Dt)
                If Tbl_TFA(i).Dt > MaxDateJson Then
                    MaxDateJson = Tbl_TFA(i).Dt
                End If
                Tbl_TFA(i).Temp = Convert.ToSingle(item.t)
                Tbl_TFA(i).Hum = Convert.ToInt16(item.hm)
                Form1.RichTextBox1.Text += Tbl_TFA(i).Dt.ToShortDateString & " " & Tbl_TFA(i).Dt.ToLongTimeString _
                    & " " & item.Loc & vbTab & Tbl_TFA(i).Temp & vbTab & item.hm & vbCrLf
                i += 1
            Next
            Return MaxDateJson
        End Function
    Nom : 2021.07.26 14.450004 PC-POLLUX.png
Affichages : 157
Taille : 9,7 Ko

    Nom : 2021.07.26 14.520005 PC-POLLUX.png
Affichages : 127
Taille : 73,6 Ko

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

Discussions similaires

  1. Installer un Web-Service (fichier executable) dans un site visual-Studio
    Par Tardiff Jean-François dans le forum Services Web
    Réponses: 3
    Dernier message: 13/12/2010, 15h30
  2. Ajouter des couleurs dans le code visual studio ?
    Par barbuslex dans le forum Visual Studio
    Réponses: 2
    Dernier message: 31/10/2009, 14h24
  3. Réponses: 10
    Dernier message: 08/08/2008, 11h58
  4. Classes dans une solution Visual Studio
    Par Seth77 dans le forum Général Dotnet
    Réponses: 2
    Dernier message: 18/04/2008, 18h35
  5. Réponses: 4
    Dernier message: 28/03/2007, 13h47

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