将JSON字符串反序列化为VB.net对象

6

我试图将一个JSON字符串转换为VB.net对象,以便更轻松地访问JSON字符串中的所有数据。

我的JSON字符串如下:

{
  "status": "ok",
  "count": 4,
  "data": [
    {
      "clan_id": 500002846,
      "nickname": "Azrael",
      "id": 500429872
    },
    {
      "clan_id": null,
      "nickname": "Azrael0",
      "id": 500913252
    },
    {
      "clan_id": 500028112,
      "nickname": "Azrael0313",
      "id": 504109422
    },
    {
      "clan_id": null,
      "nickname": "Azrael7",
      "id": 501594186
    }
  ]
}

现在我正在尝试将这个字符串反序列化为VB.net对象。

我的类定义如下:

Public Class Rootobject
    Private _data1 As String

    Public Property status As String
    Public Property count As Integer
    Public Property data() As Datum
End Class

Public Class Datum
    Public Property clan_id As Integer?
    Public Property nickname As String
    Public Property id As Integer
End Class

这是Visual Studio 2012自动生成的用于我的JSON字符串的代码。

我尝试使用.JSON反序列化器进行反序列化:

Dim Testobject As Rootobject _
= Global.Newtonsoft.Json.JsonConvert.DeserializeObject(Of Rootobject)(JSON_String)

使用JavaScriptSerializer:

Dim serializer As New System.Web.Script.Serialization.JavaScriptSerializer()
Dim Testobject_2 As Rootobject = serializer.Deserialize(Of Rootobject)(JSON_String)

但在这两种情况下,我只能访问“状态”和“计数”,而无法访问“数据”数组。

我是Visual Basic的新手,所以我阅读了很多关于JSON和反序列化程序的内容,还找到了其他遇到类似问题的人,但大多数解决方案都适用于C#,而不是VB.net

有任何想法,我可能做错了什么吗?


尝试了Public Property data() As IList(Of Datum),然后出现以下信息:无法将当前JSON对象(例如{"name":"value"})反序列化为类型'System.Collections.Generic.IList`1[WoT_Tool.WoT_Tool+Datum]',因为该类型需要一个JSON数组(例如[1,2,3])才能正确反序列化。要修正此错误,请将JSON更改为JSON数组(例如[1,2,3])。 - Azrael
2个回答

1

我使用JsonToCSharp将您的JSON转换为C#,然后将C#转换为vb.net...

Public Class Datum
    Public Property clan_id() As System.Nullable(Of Integer)
        Get
            Return m_clan_id
        End Get
        Set
            m_clan_id = Value
        End Set
    End Property
    Private m_clan_id As System.Nullable(Of Integer)
    Public Property nickname() As String
        Get
            Return m_nickname
        End Get
        Set
            m_nickname = Value
        End Set
    End Property
    Private m_nickname As String
    Public Property id() As Integer
        Get
            Return m_id
        End Get
        Set
            m_id = Value
        End Set
    End Property
    Private m_id As Integer
End Class

Public Class RootObject
    Public Property status() As String
        Get
            Return m_status
        End Get
        Set
            m_status = Value
        End Set
    End Property
    Private m_status As String
    Public Property count() As Integer
        Get
            Return m_count
        End Get
        Set
            m_count = Value
        End Set
    End Property
    Private m_count As Integer
    Public Property data() As List(Of Datum)
        Get
            Return m_data
        End Get
        Set
            m_data = Value
        End Set
    End Property
    Private m_data As List(Of Datum)
End Class

尝试使用这些类。

使用JSON.net序列化器无法工作,但使用JavascriptSerializer可以。 但是它会说列表中没有数据,而且是空的。 - Azrael

0
你很接近了;你的括号放错了位置。在你的Rootobject类中,更改这一行:
Public Property data() As Datum

转换为:

Public Property data As Datum()

或者,这个也可以:

Public Property data As List(Of Datum)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接