在VB.NET中解析JSON

在VB.NET中解析JSON,.net,json,vb.net,parsing,.net,Json,Vb.net,Parsing,我试图解析以下以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("Sta

我试图解析以下以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
解析后返回的结果如下

网址:

参考:

价格:0.00英镑

它应该是:

网址:3eae1b02

身份证号码:8151302

价格: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
Dim sReason As String=“未知”
Dim JSON As JavaScriptSerializer=新JavaScriptSerializer()
Dim SH As SandhurstData=JSON.反序列化(SandhurstData)(sResult)
如果SH.Status=“已接受”,则
app.output.RedirectURL=SH.RedirectURL
app.output.LenderReference=SH.ApplicationRef
lenderier.LenderComm=SH.佣金
接受铅()
返回真值
如果结束
原因
如果不是SH.ValidationErrors,则什么都不是
如果(SH.ValidationErrors.Count>0),则
对于SH.ValidationErrors中的每个e作为字符串
原因&=e+“;”
下一个
如果结束
如果结束
DeclineLead(sReason.Trim())
返回错误
端函数
_
公共类桑德赫斯特数据
公共属性状态()为字符串
公共属性重定向URL()为字符串
公共财产委员会(十进制)
公共属性ApplicationRef作为字符串
公共属性验证错误列表(字符串)
作为字符串的公共属性原因
末级

正如评论中提到的,这是一条路。这非常容易做到:

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
如果
反序列化对象
方法抛出错误,很可能是因为JSON无效或与目标对象不匹配


fiddle示例:

为什么不将其反序列化?您听说过一家名为“Newtonsoft”的公司吗?请看一看:即使做了一个测试,也会显示出有希望的结果。也许您应该共享一个指向完整JSON的链接<代码>SandhurstData与发布的位不匹配