VB.NET中的序列化JSON无法被Web服务器识别

时间:2017-08-19 15:09:01

标签: json vb.net serialization json.net

我是VB.NET的新手,正在开发一个简单的程序,它将两个变量序列化为JSON并将数据发送到Web服务器。 Python服务器正在接收数据,但在尝试反序列化数据时发出错误。

输入是:

tester_id = 2
operation = "P"

序列化时,它看起来像:

{
  "tester_id": 2,
  "operation": "P"
}

我们的服务器发出错误并有以下日志。

[Sat Aug 19 13:46:53.485257 2017] [:error] [pid 17352] <QueryDict: {u'{\\r\\n  "tester_id": 2,\\r\\n  "operation": "P"\\r\\n}': [u'']}>

这表明它正在接收以下密钥:

{u'{\\r\\n  "tester_id": 2,\\r\\n  "operation": "P"\\r\\n}

值为:

[u'']

这是不对的,我不明白为什么会这样收到,非常感谢任何帮助!请参阅下面的VB.NET代码。

类别:

Public Class JSON_get_sensor_id_POST
Public Property tester_id() As Integer
    Get
        Return m_tester_id
    End Get
    Set(ByVal value As Integer)
        m_tester_id = value
    End Set
End Property
Private m_tester_id As Integer

Public Property operation() As String
    Get
        Return m_operation
    End Get
    Set(ByVal value As String)
        m_operation = value
    End Set
End Property
Private m_operation As String
End Class

通话功能:

    Dim set_tester_id As Integer = 1
    Dim set_operation As String = "P"
    Dim manuf_url As String = "https://XYZ...."

    Dim JSON_to_send As New JSON_get_sensor_id_POST
    JSON_to_send.tester_id = set_tester_id
    JSON_to_send.operation = set_operation

    Dim postData = JsonConvert.SerializeObject(JSON_to_send, Formatting.Indented)
    Dim return_object = POST_to_Server(manuf_url, postData)

上传功能:

Private Function POST_to_Server(ByVal post_url As String, ByVal JSON_to_post As Object)
    Dim user_login As String = "blah@blah.com"
    Dim user_pass As String = "blah"

    Dim myCache As New CredentialCache()
    myCache.Add(New Uri(post_url), "Basic", New NetworkCredential(user_login, user_pass))

    ' Create a request using a URL that can receive a post.   
    Dim request As WebRequest = WebRequest.Create(post_url)
    ' Set the Method property of the request to POST.  
    request.Credentials = myCache
    request.Method = "POST"
    request.ContentType = "application/json"
    ' Create POST data and convert it to a byte array.  
    Dim byteArray As Byte() = Encoding.Default.GetBytes(JSON_to_post)
    ' Set the ContentLength property of the WebRequest.  
    request.ContentLength = byteArray.Length
    ' Get the request stream.  
    Dim dataStream As Stream = request.GetRequestStream()
    ' Write the data to the request stream.  
    dataStream.Write(byteArray, 0, byteArray.Length)
    ' Close the Stream object.  
    dataStream.Close()
    ' Get the response.  
    Dim response As WebResponse = request.GetResponse()
    ' Display the status.  
    Console.WriteLine(CType(response, HttpWebResponse).StatusDescription)
    ' Get the stream containing content returned by the server.  
    dataStream = response.GetResponseStream()
    ' Open the stream using a StreamReader for easy access.  
    Dim reader As New StreamReader(dataStream)
    ' Read the content.  
    Dim responseFromServer As String = reader.ReadToEnd()
    ' Display the content.  
    DebugMessage(responseFromServer)
    ' Clean up the streams.  
    reader.Close()
    dataStream.Close()
    response.Close()
    Dim myObject = JsonConvert.DeserializeObject(Of JSON_sensor_id_request_return)(responseFromServer)
    Return myObject

End Function

1 个答案:

答案 0 :(得分:0)

\ r和\ n是显示字符串时不可见的转义序列。而不是像这样格式化您的数据:

{
  "tester_id": 2,
  "operation": "P"
}

尝试将其格式化为:

{"tester_id": 2,"operation": "p"}