2013-12-17 99 views
5

我试图将JSON字符串转换为VB.net对象,以便轻松访问JSON字符串中的数据。将JSON字符串反序列化为VB.net对象

我的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

任何想法我可能做错了?

+0

试过'公共属性Data()作为IList的(中Datum)' 然后它说: 无法反序列化当前的JSON对象(例如{“name”:“value”})到类型'System.Collec tions.Generic.IList'1 [WoT_Tool.WoT_Tool + Datum]',因为该类型需要JSON数组(例如, [1,2,3])来正确地反序列化。 要解决此错误,请将JSON更改为JSON数组(例如[1,2,3]) – Azrael

回答

1

我转换使用JsonToCSharp您的JSON ...然后转换的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 

给这些类一试。

+0

使用JSON.net序列化程序无法正常工作,但使用的是JavascriptSerializer。 但是,它说,列表中没有数据,而且它是空的。 – Azrael

0

你很近;你的圆括号在错误的地方。在你Rootobject类,改变这一行:

Public Property data() As Datum 

这样:

Public Property data As Datum() 

或者,这也将工作:

Public Property data As List(Of Datum) 
相关问题