1

I look for a solution to my problem since 2 weeks without solution. I would like to deserialize JSON with JSON.NET, but noway ...

I create class but when i deserialize the object stay empty (Nothing).

Here the JSON :

{"plannifReponse":
{"@competence":"Abonnement","plannifDonnees":
{"entry":
[
{"key":"2013-8-11T00:00","value":
{"creneaux":
[
{"@jour":"2013-8-11T00:00","@heure":"09","@minute":"30","nombreRessources":10},
{"@jour":"2013-8-11T00:00","@heure":"10","@minute":"30","nombreRessources":2},
{"@jour":"2013-8-11T00:00","@heure":"17","@minute":"30","nombreRessources":5},
{"@jour":"2013-8-11T00:00","@heure":"20","@minute":"30","nombreRessources":5},
{"@jour":"2013-8-11T00:00","@heure":"21","@minute":"00","nombreRessources":16}
]
}
},
{"key":"2013-7-30T00:00","value":
{"creneaux":
[{"@jour":"2013-7-30T00:00","@heure":"12","@minute":"00","nombreRessources":4},{"@jour":"2013-7-30T00:00","@heure":"12","@minute":"15","nombreRessources":10},{"@jour":"2013-7-30T00:00","@heure":"12","@minute":"30","nombreRessources":3},{"@jour":"2013-7-30T00:00","@heure":"14","@minute":"00","nombreRessources":8},{"@jour":"2013-7-30T00:00","@heure":"18","@minute":"30","nombreRessources":10}]}}]}}}

For this i translate with that Class:

Public Class plannifReponse
    Public competence As String
    Public plannifDonnees As Dictionary(Of String, ListCreneaux)
End Class

Public Class ListCreneaux
    Public listCreneaux() As Creneau
End Class

Public Class Creneau
    Public jour As String
    Public heure As String
    Public minute As String
    Public nombreRessources As Integer
    Public Sub New(ByVal _jour, ByVal _heure, ByVal _minute, ByVal _nombreRessources)
        jour = _jour
        heure = _heure
        minute = _minute
        nombreRessources = _nombreRessources
    End Sub
End Class

And the code :

Dim prev As plannifReponse = JsonConvert.DeserializeObject(Of plannifReponse)(My_dispos)

But it doesn't work, no error message, but prev stay "Nothing"

For help, here the source object use to serialise (it is on Java)

public class OutputPlannif {
    private String competence;
    private HashMap<String, ListCreneaux> plannifDonnees;
}

public class ListCreneaux {
    private ArrayList<Creneau> listCrenaux;
}

public class Creneau {
    private String jour;
    private String heure;
    private String minute;
    private int nombreRessources;
}

If anyone have an idea... Thanks Matt

user972506
  • 75
  • 2
  • 7

1 Answers1

4

You should create a series of classes which map the JSON you want to deserialize. There are tools (such as this one) which can do that for you. Or you can do it by hand, taking one member at a time, with the result shown below:

Public Class StackOverflow_17956746
    Public Class OutputPlannif
        <JsonProperty("plannifReponse")> _
        Public PlannifReponse As PlannifReponse
    End Class

    Public Class PlannifReponse
        <JsonProperty("@competence")> _
        Public Competence As String

        <JsonProperty("plannifDonnees")> _
        Public PlannifDonnees As PlannifDonnees
    End Class

    Public Class PlannifDonnees
        <JsonProperty("entry")> _
        Public Entries As List(Of Entry)
    End Class

    Public Class Entry
        <JsonProperty("key")> _
        Public Key As String
        <JsonProperty("value")> _
        Public Value As Value
    End Class

    Public Class Value
        <JsonProperty("creneaux")> _
        Public ListCreneaux As List(Of Creneau)
    End Class

    Public Class Creneau
        <JsonProperty("@jour")> _
        Public Jour As String
        <JsonProperty("@heure")> _
        Public Heure As String
        <JsonProperty("@minute")> _
        Public Minute As String
        <JsonProperty("nomberRessources")> _
        Public NombreRessources As Integer
    End Class

    Const JSON As String = "{" & vbCrLf & _
"    ""plannifReponse"":" & vbCrLf & _
"{""@competence"":""Abonnement"",""plannifDonnees"":" & vbCrLf & _
"{""entry"":" & vbCrLf & _
"[" & vbCrLf & _
"{""key"":""2013-8-11T00:00"",""value"":" & vbCrLf & _
"{""creneaux"":" & vbCrLf & _
"[" & vbCrLf & _
"{""@jour"":""2013-8-11T00:00"",""@heure"":""09"",""@minute"":""30"",""nombreRessources"":10}," & vbCrLf & _
"{""@jour"":""2013-8-11T00:00"",""@heure"":""10"",""@minute"":""30"",""nombreRessources"":2}," & vbCrLf & _
"{""@jour"":""2013-8-11T00:00"",""@heure"":""17"",""@minute"":""30"",""nombreRessources"":5}," & vbCrLf & _
"{""@jour"":""2013-8-11T00:00"",""@heure"":""20"",""@minute"":""30"",""nombreRessources"":5}," & vbCrLf & _
"{""@jour"":""2013-8-11T00:00"",""@heure"":""21"",""@minute"":""00"",""nombreRessources"":16}" & vbCrLf & _
"]" & vbCrLf & _
"}" & vbCrLf & _
"}," & vbCrLf & _
"{""key"":""2013-7-30T00:00"",""value"":" & vbCrLf & _
"{""creneaux"":" & vbCrLf & _
"[{""@jour"":""2013-7-30T00:00"",""@heure"":""12"",""@minute"":""00"",""nombreRessources"":4},{""@jour"":""2013-7-30T00:00"",""@heure"":""12"",""@minute"":""15"",""nombreRessources"":10},{""@jour"":""2013-7-30T00:00"",""@heure"":""12"",""@minute"":""30"",""nombreRessources"":3},{""@jour"":""2013-7-30T00:00"",""@heure"":""14"",""@minute"":""00"",""nombreRessources"":8},{""@jour"":""2013-7-30T00:00"",""@heure"":""18"",""@minute"":""30"",""nombreRessources"":10}]}}]}}}"

    Public Shared Sub Test()
        Dim output As OutputPlannif
        output = JsonConvert.DeserializeObject(Of OutputPlannif)(JSON)
        Console.WriteLine(output)
    End Sub
End Class
carlosfigueira
  • 85,035
  • 14
  • 131
  • 171