我试图使用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
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 “}},{” 决赛 “:{” ID “:20,” vote_percentage “:” 1" } }]
最后我的反序列化:
Dim Results As New List(Of result)
Results = JsonConvert.DeserializeObject(Of List(Of result))(_result)
结果是9个没有分配任何属性值的对象。
我正在绞尽脑汁,所以如果有人能给我一块骨头,我会很感激。
感谢。
更新:
所以这是我做出的改变让它发挥作用:
创建了一个具有属性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),以便在反序列化调用期间设置属性。
答案 0 :(得分:1)
我不知道JSON.NET但是我可以告诉你有一个对象数组,它们的结构与VB.NET类定义的结构不同。
如果格式化JSON,您可以更清楚地看到这一点:
[
{
"finalist": {
"id": 12,
"vote_percentage": "28"
}
},
{
"finalist": {
"id": 13,
"vote_percentage": "6"
}
},
...
]
我猜测(因为我对.NET平台知之甚少)JSON.NET需要一个具有相同结构的类的实例列表 - 所以像这样的类定义(伪代码) ):
class item
public property finalist as result
class result
public property id as Integer
public property vote_percentage as String
您可能还想做的只是摆脱item
类并在JSON中直接使用result
对象:
[
{
"id": 12,
"vote_percentage": "28"
},
{
"id": 13,
"vote_percentage": "6"
},
...
]
这样,你有一个简化的对象数组,代表result
个实例,没有看似无用的“包装器对象”(即那些代表item
实例的对象)。