如何将此JSON对象反序列化为vb.net对象?

时间:2015-02-18 15:09:40

标签: json vb.net serialization webforms

我正在使用JSon.net反序列化我从GravityForms Web API获取的json对象。

我回来的json就是这个......

{"status":200,"response":{
                "12":{"id":"12","title":"Test Form","entries":"1"},
                "1":{"id":"1","title":"What's My Home Worth?","entries":"92"}
            }
}

我反序列化的VB.net对象是

  Namespace Forms
        Public Class GFForm
            Public Property id As String
            Public Property title As String
            Public Property entries As String
        End Class

        Public Class Response
            <JsonProperty("1")>
            Public Property GFForms() As GFForm
        End Class

        Public Class TopLevel
            Public Property status As Integer
            Public Property response As Response
        End Class
    End Namespace

我正在执行这样的JsonConvert语句..

            Dim obj As GravityForms.Forms.TopLevel
            obj = JsonConvert.DeserializeObject(Of GravityForms.Forms.TopLevel)(str)

它似乎成功地将json反序列化为我的vb对象,但我只获得了1个响应对象。我应该得到其中的两个吗?

奇怪的是,我得到的GFForm是第二个(ID:1),这使它看起来像是写了第一个对象的值(ID:12)

任何帮助都会很棒,因为我在2天的大部分时间里一直在弄乱这个并且我迷失了。

编辑:

我在上面的问题中并不清楚。我不知道从Web服务返回的GFForm对象的数量。它可以是2(如示例中所示)或者可以是32或45或其他。

我想把GFForm对象放在我可以绑定到datagridview的东西上

1 个答案:

答案 0 :(得分:0)

您的响应中有两个GFForm属性,但是一个Response对象有一个要填充的属性。也许你应该尝试使用类似的东西

Namespace Forms
    Public Class GFForm
        Public Property id As String
        Public Property title As String
        Public Property entries As String
    End Class

    Public Class Response
        <JsonProperty("1")>
        Public Property GFForms1 As GFForm
        Public Property GFForms12 As GFForm
    End Class

    Public Class TopLevel
        Public Property status As Integer
        Public Property response As Response
    End Class
End Namespace

编辑:如果您不知道响应属性的数量,请尝试为每个属性创建一个新的Response对象。