VB.NET中反序列化JSON数据的问题
我试图使用visual basic中的JSON.NET库将一个简单的JSON数组反序列化为.NET对象 就我个人而言,我不知道我在这里做错了什么。我的JSON字符串反序列化为适当的对象(总共9个),但没有填充任何属性 我的代码:VB.NET中反序列化JSON数据的问题,vb.net,json,json.net,deserialization,Vb.net,Json,Json.net,Deserialization,我试图使用visual basic中的JSON.NET库将一个简单的JSON数组反序列化为.NET对象 就我个人而言,我不知道我在这里做错了什么。我的JSON字符串反序列化为适当的对象(总共9个),但没有填充任何属性 我的代码: Public Class result Public Property id As Integer Public Property vote_percentage As String Public Sub New() End Sub Pub
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,“投票率”:“28”},{“决赛者”:{“id”:13,“投票率”:“6”},{“决赛者”:{“id”:14,“投票率”:“4”},{“决赛者”:{“id”:15,“投票率”:“3”},{“决赛者”:{“id”:16,“投票率”:“7”},{“决赛者”:{“id”:17,“投票率”:“1”},{“id”:18,{“决赛者”:{“投票率”:,“投票百分比”:“2”},{“决赛选手”:{“id”:20,“投票百分比”:“1”}]
最后,我的反序列化:
Dim Results As New List(Of result)
Results = JsonConvert.DeserializeObject(Of List(Of result))(_result)
结果是9个对象没有指定任何特性值
我在绞尽脑汁,所以如果有人能扔我一根骨头,我会很感激的
谢谢
更新:
这就是我所做的改变,让这一切得以实现:
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)。我不知道JSON.NET,但我可以告诉你,你有一个对象数组,它的结构与你的VB.NET类定义的不同 如果格式化JSON,您可以更清楚地看到这一点:
[
{
“决赛选手”:{
“id”:12,
“投票率”:“28”
}
},
{
“决赛选手”:{
“id”:13,
“投票率”:“6”
}
},
...
]
我猜(因为我对.NET平台知之甚少),JSON.NET需要一个具有相同结构的类的实例列表——因此类似这样的类定义(伪代码):
您可能还想做的是简单地去掉项
类,直接在JSON中使用结果
对象:
[
{
“id”:12,
“投票率”:“28”
},
{
“id”:13,
“投票率”:“6”
},
...
]
这样,您就有了一个表示
result
实例的简化对象数组,而没有看似无用的“包装器对象”(即那些表示item
实例的对象).您能尝试在不使用包装的finalist属性的情况下解析json吗?目前您有一个只包含finalist属性的对象数组,而您的类没有。我不明白您的意思。您是否建议我从json字符串中删除finalist的所有实例?我的印象是finalist映射到一个result class.pimvdb的单个实例-你让我发现了一些问题,并解决了它。我更新了代码以显示一个有效的解决方案。这似乎是相关的:@jdben:你能将你的解决方案复制到一个答案并将其标记为已接受(是的,你可以回答你自己的问题并接受你自己的答案)?这样问题就会显示为已回答。
class item
public property finalist as result
class result
public property id as Integer
public property vote_percentage as String