VB.net 使用 JSON.net 反序列化 JSON
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/17956746/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
VB.net deserialize JSON with JSON.net
提问by user972506
I look for a solution to my problem since 2 weeks without solution. I would like to deserialize JSON with JSON.NET, but noway ...
我一直在寻找解决问题的方法,因为 2 周没有解决方案。我想用 JSON.NET 反序列化 JSON,但现在......
I create class but when i deserialize the object stay empty (Nothing).
我创建了类,但是当我反序列化对象时,对象保持为空(无)。
Here the JSON :
这里的 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)
如需帮助,此处使用源对象进行序列化(在 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
如果有人有想法......谢谢马特
回答by carlosfigueira
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:
您应该创建一系列映射要反序列化的 JSON 的类。有一些工具(例如这个)可以为您做到这一点。或者你也可以手工完成,一次带一名成员,结果如下所示:
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

