2017-08-19 4 views
0

私はVB.NETを初めて使い、JSONに2つの変数をシリアル化してデータをWebサーバーにPOSTする簡単なプログラムに取り組んでいます。データはPythonサーバーによって受信されていますが、データを逆シリアル化しようとするとエラーが発生しています。VB.NETでシリアル化されたJSONがWebサーバーによって認識されない

の入力は、以下のとおりです。当社のサーバーがエラーを与え、次のログを持ってい

{ 
    "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 = "[email protected]" 
    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 

答えて

0

rと\ nは\文字列が表示されたときに表示されていないエスケープシーケンスです。代わりに、このようなあなたのデータをフォーマットする:

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

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

はそれをこのような何かをフォーマットしてみてください

関連する問題