Json 参数在 Vb.net

Json with parameters in Vb.net

我需要将 json 数据发送到 API,包括 QR 码和一些其他值。

这是我从他们那里得到的

需要的参数是:

• JSON 中的参数“数据”: id -> 100(固定,这是我们软件需要的ID) 二维码 -> 二维码值

示例:data={"id":"100","qrcode":"VL11bbdb186a3a6dcfc57a1b07149c9a0e"}

这是我使用的代码

通话:

     Dim jsonPost As New JsonPost(postadress)
                Dim dictqr As New Dictionary(Of String, Object)
                dictqr.Add("id", lastmeas.id)
                dictqr.Add("qrcode", lastmeas.qrcode)
                jsonPost.PostData(dictqr)

这是定义

    Public Class JsonPost

        Private urlToPost As String = ""

        Public Sub New(ByVal urlToPost As String)
            Me.urlToPost = urlToPost
        End Sub

        Public Function PostData(ByVal dictData As Dictionary(Of String, Object)) As Boolean
            Dim webClient As New WebClient()
            Dim resByte As Byte()
            Dim resString As String
            Dim reqString() As Byte

            ServicePointManager.ServerCertificateValidationCallback = Function(o, certificate, chain, errors) True
            Try
                webClient.Headers("content-type") = "application/json"
                webClient.Headers("accept") = "*/*"
                reqString = Encoding.Default.GetBytes(JsonConvert.SerializeObject(dictData, Newtonsoft.Json.Formatting.None))
                resByte = webClient.UploadData(Me.urlToPost, "POST", reqString)
                resString = Encoding.Default.GetString(resByte)
                Form1.respuesta_envio = resString
                webClient.Dispose()
                Return True
            Catch ex As Exception
                Form1.respuesta_envio = ex.Message
                CreateObject("WScript.Shell").Popup(ex.Message, 5, "Data not transfered")
            End Try
            Return False

        End Function

    End Class

如果我反序列化,我得到

{"id":"100","qrcode":"example"}

但我不知道如何包含此数据=部分

API 似乎要求您在 form-url-encoded 参数中发送 JSON 字符串。这样设计 API 很不愉快,也不符合逻辑,但如果这是他们的要求,那么您就必须这样做。

因此您需要:

  • 删除告诉服务器在请求中期待 JSON body 的 Content-Type header。您实际发送的是 form-url-encoded 数据,其中一个参数恰好在其值中包含 JSON。即删除此行:
webClient.Headers("content-type") = "application/json"
  • data= 位添加到 SerializeObject 函数生成的 JSON 字符串中:
reqString = Encoding.Default.GetBytes("data=" & JsonConvert.SerializeObject(dictData, Newtonsoft.Json.Formatting.None))