【问题标题】:Newtonsoft JSON parsing into objectNewtonsoft JSON 解析成对象
【发布时间】:2018-09-20 12:44:35
【问题描述】:

我的 VB 有点生疏,但我需要解析一个 JSON 字符串。我已经在没有问题的 C# 中做到了。这是一个旧项目,我正在使用 VS2008。 这是我的课:

Public Class ResponseMeta
    Private _type As String
    <JsonProperty("type")> _
    Public Property type() As String
        Get
            Return _type.ToString()
        End Get
        Set(ByVal value As String)
            _type = value
        End Set
    End Property

    Private _message As String
    <JsonProperty("message")> _
    Public Property message() As String
        Get
            Return _message
        End Get
        Set(ByVal value As String)
            _message = value
        End Set
    End Property

    Private _message_v1 As String
    <JsonProperty("message-v1")> _
    Public Property message_v1() As String
        Get
            Return _message_v1
        End Get
        Set(ByVal value As String)
            _message_v1 = value
        End Set
    End Property

    Private _message_v2 As String
    <JsonProperty("message-v2")> _
    Public Property message_v2() As String
        Get
            Return _message_v2
        End Get
        Set(ByVal value As String)
            _message_v2 = value
        End Set
    End Property

    Private _message_v3 As String
    <JsonProperty("message-v3")> _
    Public Property message_v3() As String
        Get
            Return _message_v3
        End Get
        Set(ByVal value As String)
            _message_v3 = value
        End Set
    End Property

    Private _message_v4 As String
    <JsonProperty("message-v4")> _
    Public Property message_v4() As String
        Get
            Return _message_v4
        End Get
        Set(ByVal value As String)
            _message_v4 = value
        End Set
    End Property 
End Class

要反序列化的代码是:

Dim test As String
test = "{""response-meta"":{""type"":""S"",""message"":"""",""Total No Of Records"":"""",""message-v1"":""1"",""message-v2"":"""",""message-v3"":"""",""message-v4"":""""}}"
Dim testcl As ResponseMeta
testcl = JsonConvert.DeserializeObject(Of ResponseMeta)(test)

对象的所有属性都设置为Nothing,如果我添加手表,它会说:

type = {"对象引用未设置为对象的实例。"}

我现在已经在这方面花费了无数个小时,而 Google 没有找到任何提示或线索来说明这里可能出了什么问题。

非常欢迎任何建议。

【问题讨论】:

  • 为什么需要使用不受支持的 Visual Studio 版本来编辑旧代码? VS 2017 应该可以正常工作

标签: json vb.net visual-studio class json.net


【解决方案1】:

JSON 与您尝试解析的内容不匹配。

您缺少一个根对象。

Public Class RootObject
    Private _root As ResponseMeta
    <JsonProperty("response-meta")> _
    Public Property ResponseMeta() As ResponseMeta
        Get
            Return _root 
        End Get
        Set(ByVal value As ResponseMeta)
            _root = value
        End Set
    End Property
End Class

因此,基于 JSON,您需要先反序列化为根对象,然后获取元数据

Dim root As RootObject = JsonConvert.DeserializeObject(Of RootObject)(test)
Dim testcl As ResponseMeta = root.ResponseMeta

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    • 2016-06-16
    • 1970-01-01
    相关资源
    最近更新 更多