VB.net使用JSON.net反序列化JSON

时间:2013-07-30 20:28:41

标签: json vb.net json.net deserialization

我寻找解决问题的解决方案,因为2周没有解决方案。 我想用JSON.NET反序列化JSON,但现在......

我创建了类,但是当我反序列化时,对象保持为空(Nothing)。

这里是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}]}}]}}}

为此,我翻译了该课程:

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

代码:

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

但它不起作用,没有错误信息,但是保持“没什么”

要获得帮助,这里的源对象用于序列化(它在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;
}

如果有人有想法...... 谢谢 马特

1 个答案:

答案 0 :(得分:4)

您应该创建一系列映射要反序列化的JSON的类。有一些工具(such as this one)可以为您做到这一点。或者您可以手动完成,一次只需一名成员,结果如下所示:

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