我试图在Visual Basic中使用JSON.NET库将一个简单的JSON数组反序列化为.NET对象。反序列化VB.NET中的JSON数据的问题
对于我的生活,我无法弄清楚我在这里做错了什么。我的JSON字符串反序列化成适当的对象(总共9个),但没有填充任何属性。
我的代码:
Public Class result
Public Property id As Integer
Public Property vote_percentage As String
Public Sub New()
End Sub
Public Sub New(ByVal id As Integer, ByVal vote_percentage As String)
Me.id = id
Me.vote_percentage = vote_percentage
End Sub
End Class
的JSON数据,我尝试反序列化看起来像这样:
[{ “入围”:{ “ID”:12, “vote_percentage”:” 28 “}},{” 决赛 “:{” ID “:13,” vote_percentage “:” 6 “}},{” 决赛 “:{” ID “:14,” vote_percentage “:” 4" }},{ “决赛”:{ “ID”:15, “vote_percentage”: “3”}},{ “决赛”:{ “ID”:16, “vote_percentage”: “7”}},{ “决赛”:{” ID “:17,” vote_percentage “:” 1 “}},{” 决赛 “:{” ID “:18,” vote_percentage “:” 47 “}},{” 决赛 “:{” ID “:19,” vote_percentage“:”2“}},{”finalist“:{”id“:20,”vote_percentage“:”1“}}]
最后我反序列化:
Dim Results As New List(Of result)
Results = JsonConvert.DeserializeObject(Of List(Of result))(_result)
结果是没有分配任何属性值9级的对象。
我在绞尽脑汁,所以如果有人能把我的骨头扔掉,我会很感激。
谢谢。
UPDATE:
因此,这里是得到这个工作,我所做的更改:
- 修改了我的结果类包含类型为入围的属性决赛
创建一个新的类入围与属性id和vote_percentage
Public Class finalist Public Property id As Integer Public Property vote_percentage As String Public Sub New() End Sub Public Sub New(ByVal id As Integer, ByVal vote_percentage As String) Me.id = id Me.vote_percentage = vote_percentage End Sub End Class Public Class result Public Property finalist As finalist Public Sub New() finalist = New finalist End Sub Public Sub New(ByVal id As Integer, ByVal vote_percentage As String) Me.finalist = New finalist(id, vote_percentage) End Sub End Class
单独留下解串:
_result = System.Text.Encoding.ASCII.GetString(data)
Dim Results As New List(Of result)
Results = JsonConvert.DeserializeObject(Of List(Of result))(_result)
RaiseEvent VoteCompleted(loopCounter, _VoteCount, time, _result)
它工作。
为新人(像我自己)的说明。在使用JSON.NET时,必须具有构造函数方法(即Sub New),才能在反序列化调用期间设置属性。
你可以尝试解析没有包装finalist属性的json吗?目前,你只有一个只有finalist属性的对象数组,而你的类没有这个属性。 – pimvdb 2012-02-03 17:56:52
我不明白你的意思。你是否建议我从json字符串中移除决赛选手的所有实例?我的印象是入围者映射到了一个结果类的单个实例。 – jdbenn 2012-02-03 18:11:38
pimvdb - 你把我带到了一些东西上,并修复了它。我更新了我的代码以显示工作解决方案。 – jdbenn 2012-02-03 18:16:17