"Option Strict On" lässt spätes Binden nicht zu(Json).

  • VB.NET
  • .NET (FX) 4.0

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von whitetiiger.

    "Option Strict On" lässt spätes Binden nicht zu(Json).

    Guten Morgen,
    ich habe ein hoffentlich kleines Problem mit "Json" und "Option Strict On".

    Ich Suche und Probiere seid 3 Stunden 2 Funktionen Fehlerfrei zubekommen und scheitere an dem Letzten Punkt.
    Auch die Suche vom Forum mit den 3 gleichen Problemen hat mir zu keine Lösung verholfen.

    Das ist die Verwendung, als Source benutze ich eine Json Sample Seite.

    VB.NET-Quellcode

    1. Dim jsonobject As Object = GetJsonObject(GetHttpResponse("http://validate.jsontest.com/?json=%5BJSON-code-to-validate%5D"))
    2. MsgBox(jsonobject.Item("parse_time_nanoseconds").ToString())


    und das sind die dazugehörigen Funktionen

    VB.NET-Quellcode

    1. Public Function GetHttpResponse(ByVal link As String) As String
    2. Try
    3. Dim myRequest As WebRequest = WebRequest.Create(link)
    4. Dim myResponse As WebResponse = myRequest.GetResponse()
    5. Dim DataStream = myResponse.GetResponseStream()
    6. Dim reader As New StreamReader(DataStream)
    7. Dim ServerResponse As String = reader.ReadToEnd()
    8. myResponse.Close()
    9. DataStream.Close()
    10. reader.Close()
    11. Return ServerResponse
    12. Catch ex As Exception
    13. MsgBox("Status-Code 408: Request Time-out")
    14. End Try
    15. Return "ERROR"
    16. End Function
    17. Public Function GetJsonObject(ByVal link As String) As Object
    18. Return Newtonsoft.Json.Linq.JObject.Parse(CStr(GetHttpResponse(link)))
    19. End Function


    P.s. Die Funktion GetHttpResponse sieht zwar noch etwas Chaotisch aus, jedoch wird es auch noch gemacht. Z.b. ist die Arbeitsweise von dem Code auch relative Langsam.

    Desweiteren bin ich für eventuell Optimierungen Jederzeit offen und Dankbar.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „whitetiiger“ ()

    whitetiiger schrieb:

    als Source benutze ich eine Json Sample Seite.


    Wird dort wirklich ein Object verwendet oder ein JObject(Newtonsoft.Json.Linq.JObject)? Ein Object hat kein "Item". Hier 2 samples, wobei ich das 2. besser finde, da der GUI-Thread beim downloaden nicht blockiert, da mit dem Webclient ansynchron geladen werden kann. Zudem wuerde ich mit der Funktion GetHttpResponse beim Returnwert nicht "ERROR" ausgeben, da so der naechste Fehler produziert wird bei JObject.Parse. Gib einfach einen leeren String zurueck.

    variante1

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports System.IO
    3. Imports System.Net
    4. Imports Newtonsoft.Json.Linq
    5. Public Class Form1
    6. Public Function GetHttpResponse(ByVal link As String) As String
    7. Try
    8. Using streamReader As New StreamReader(WebRequest.Create(link).GetResponse().GetResponseStream())
    9. Return streamReader.ReadToEnd()
    10. End Using
    11. Catch ex As Exception
    12. Return ""
    13. End Try
    14. End Function
    15. Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
    16. Dim jsonString As String = "http://validate.jsontest.com/?json=%5BJSON-code-to-validate%5D"
    17. Dim json As JObject = JObject.Parse(GetHttpResponse(jsonString))
    18. If json IsNot Nothing Then
    19. Debug.WriteLine(json("object_or_array"))
    20. Debug.WriteLine(json("empty"))
    21. Debug.WriteLine(json("parse_time_nanoseconds"))
    22. Debug.WriteLine(json("validate"))
    23. Debug.WriteLine(json("size"))
    24. End If
    25. End Sub
    26. End Class



    variante2

    VB.NET-Quellcode

    1. Option Strict On
    2. Imports Newtonsoft.Json
    3. Imports System.IO
    4. Imports System.Net
    5. Public Class Form1
    6. Public Enum WebClientUserToken
    7. LoadJson
    8. 'Others
    9. End Enum
    10. Private WithEvents WebClient As New WebClient
    11. Public Class JSON_DING
    12. Public Property object_or_array As String
    13. Public Property [empty] As Boolean
    14. Public Property parse_time_nanoseconds As Integer
    15. Public Property [validate] As Boolean
    16. Public Property size As Integer
    17. End Class
    18. Private Sub WebClient_DownloadStringCompleted(ByVal sender As Object, ByVal e As System.Net.DownloadStringCompletedEventArgs) Handles WebClient.DownloadStringCompleted
    19. If e.Error Is Nothing Then
    20. Select Case DirectCast(e.UserState, WebClientUserToken)
    21. Case WebClientUserToken.LoadJson
    22. Dim jsonDing As JSON_DING = JsonConvert.DeserializeObject(Of JSON_DING)(e.Result)
    23. If jsonDing IsNot Nothing Then
    24. Debug.WriteLine(jsonDing.object_or_array)
    25. Debug.WriteLine(jsonDing.empty)
    26. Debug.WriteLine(jsonDing.parse_time_nanoseconds)
    27. Debug.WriteLine(jsonDing.validate)
    28. Debug.WriteLine(jsonDing.size)
    29. End If
    30. End Select
    31. Else
    32. MessageBox.Show("Error in WebClient_DownloadString: " & e.Error.ToString())
    33. End If
    34. End Sub
    35. Private Sub Form1_Shown(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Shown
    36. WebClient.DownloadStringAsync(New Uri("http://validate.jsontest.com/?json=%5BJSON-code-to-validate%5D"), WebClientUserToken.LoadJson)
    37. End Sub
    38. End Class


    And i think to myself... what a wonderfuL World!