正在 VB.NET 中解析 JSON

Parsing JSON in VB.NET

我正在尝试解析 JSON

中返回的以下数据
{
    "Id":8151302,
    "Status":"Accepted",
    "Response":"0",
    "Price":"0.88",
    "Detail":"https://api.test.com/Redirect/Index 3eae1b02"
}

这是我尝试使用的:

sresult = sresult.Replace("""""", String.Empty)

If sresult.Contains("Status"":""Accepted") Then
    Dim parts = sresult.Replace("{", String.Empty).Replace("}", String.Empty).Split(",")

    For i As Int16 = 0 To parts.Length - 1
        If parts(i).StartsWith("Detail"":") Then
            app.Outcome.RedirectURL = parts(i).Substring(12)
        End If

        If parts(i).StartsWith("Price"":") Then
            lendertier.LenderComm = CDec(parts(i).Substring(11))
        End If

        If parts(i).StartsWith("Id") Then
            app.Outcome.LenderReference = parts(i).Substring(15)
        End If
    Next

    AcceptLead()
    Return True

我解析后得到的返回结果是

URL:

REF:

PRICE:£0.00

应该是:

URL: https://api.test.com/Redirect/Index 3eae1b02

ID: 8151302

PRICE: 0.88

我也试过反序列化它。我得到相同的结果:

Dim sReason As String = "Unknown"
    Dim JSON As JavaScriptSerializer = New JavaScriptSerializer()
    Dim SH As SandhurstData = JSON.Deserialize(Of SandhurstData)(sResult)
    If SH.Status = "Accepted" Then
        app.Outcome.RedirectURL = SH.RedirectURL
        app.Outcome.LenderReference = SH.ApplicationRef
        lendertier.LenderComm = SH.Commission
        AcceptLead()
        Return True
    End If
    sReason = SH.Reason
    If Not SH.ValidationErrors Is Nothing Then
        If (SH.ValidationErrors.Count > 0) Then
            For Each e As String In SH.ValidationErrors
                sReason &= e + "; "
            Next
        End If
    End If
    DeclineLead(sReason.Trim())
    Return False    
End Function

<Serializable> _
Public Class SandhurstData
    Public Property Status() As String
    Public Property RedirectURL() As String
    Public Property Commission() As Decimal

    Public Property ApplicationRef As String
    Public Property ValidationErrors As List(Of String)
    Public Property Reason As String
End Class

如评论所述,JSON.NET 是必经之路。超级简单:

Public Sub Main()
    Dim json as String = "{'Id':'8151302', 'Status':'Accepted', 'Response':'0', 'Price':'0.88', 'Detail':'https://api.test.com/Redirect/Index 3eae1b02'}"
    Dim deserialized = JsonConvert.DeserializeObject(of SandhurstData)(json)

    Console.WriteLine(deserialized)
End Sub

Public Class SandhurstData
    Public Id as String
    Public Status as String
    Public Response as String
    Public Price as Double
    Public Detail as String

    Public Overrides Function ToString() as String
        return String.Format("Id: {1} {0}Status: {2} {0}Response: {3} {0}Price: {4} {0}Detail: {5}", Environment.NewLine, Id, Status, Response, Price, Detail)
    End Function
End Class

如果 DeserializeObject 方法抛出错误,可能是因为您的 JSON 无效或与目标对象不匹配。

示例 fiddle:here