JsonConvert.DeserializeObject

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von woeh.

    JsonConvert.DeserializeObject

    morgen :)ich habe wieder mal ein problem....

    ich habe ein JSON$, den ich gerne parsen würde.

    Hier ein teil des $

    {"album":{"name":"Century Child","artist":"Nightwish","mbid":"ae07d037-3f41-3593-924b-92dfbc6bcb27","url":"https://www.last.fm/music/Nightwish/Century+Child","image":[{"#text":"https://lastfm-img2.akamaized.net/i/u/34s/ef83bc2e2381c25e098d52a71c1d12b0.png","size":"small"},{"#text":"https://lastfm-img2.akamaized.net/i/u/64s/ef83bc2e2381c25e098d52a71c1d12b0.png","size":"medium"},{"#text":"https://lastfm-img2.akamaized.net/i/u/174s/ef83bc2e2381c25e098d52a71c1d12b0.png","size":"large"},{"#text":"https://lastfm-img2.akamaized.net/i/u/300x300/ef83bc2e2381c25e098d52a71c1d12b0.png","size":"extralarge"},{"#text":"https://lastfm-img2.akamaized.net/i/u/ef83bc2e2381c25e098d52a71c1d12b0.png","size":"mega"},{"#text":"https://lastfm-img2.akamaized.net/i/u/arQ/ef83bc2e2381c25e098d52a71c1d12b0.png","size":""}],"

    ich würde gerne die links parsen....um zu testen wollte ich erstmal "name" parsen.

    mein code:

    VB.NET-Quellcode

    1. Public Function GetCoverFromNet(pb As PictureBox,
    2. ByVal artist As String,
    3. ByVal album As String) As Graphics
    4. Dim url As String = "http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=MEINAPIKEY&artist=" & artist & "&album=" & album & "&format=json"
    5. Dim client As New Net.WebClient()
    6. Dim source As String = client.DownloadString(New Uri(url))
    7. Dim obj As clsfmLast
    8. 'Clipboard.SetText(url)
    9. Application.DoEvents()
    10. 'Clipboard.SetText(source)
    11. obj = JsonConvert.DeserializeObject(Of clsfmLast)(source)
    12. MsgBox(obj.name)
    13. End Function


    Hier die klasse:

    VB.NET-Quellcode

    1. Public Class clsfmLast
    2. Public Property album() As String
    3. Get
    4. Return m_album
    5. End Get
    6. Set
    7. m_album = Value
    8. End Set
    9. End Property
    10. Private m_album As String
    11. Public Property name() As String
    12. Get
    13. Return m_name
    14. End Get
    15. Set
    16. m_name = Value
    17. End Set
    18. End Property
    19. Private m_name As String
    20. End Class


    in der schnellansicht funktioniert es zumindest.

    ich bekomme bei dem aufruf

    VB.NET-Quellcode

    1. obj = JsonConvert.DeserializeObject(Of clsfmLast)(source)


    folgenden fehler:

    Ein Ausnahmefehler des Typs "Newtonsoft.Json.JsonReaderException" ist in Newtonsoft.Json.dll aufgetreten. Zusätzliche Informationen: Unexpected character encountered while parsing value: {. Path 'album', line 1, position 10.

    was mache ich denn falsch ? habe mir das im netz zusammengesucht & es wird überall so beschrieben, wie ich es gemacht habe.
    ich habe das mal durchgejagt...meine klasse sieht jetzt so aus:

    VB.NET-Quellcode

    1. Public Class clsfmLast
    2. Public Class Image
    3. Public Property text As String
    4. Public Property size As String
    5. End Class
    6. Public Class Attr
    7. Public Property rank As String
    8. End Class
    9. Public Class Streamable
    10. Public Property text As String
    11. Public Property fulltrack As String
    12. End Class
    13. Public Class Artist
    14. Public Property name As String
    15. Public Property mbid As String
    16. Public Property url As String
    17. End Class
    18. Public Class Track
    19. Public Property name As String
    20. Public Property url As String
    21. Public Property duration As String
    22. Public Property attr As Attr
    23. Public Property streamable As Streamable
    24. Public Property artist As Artist
    25. End Class
    26. Public Class Tracks
    27. Public Property track As Track()
    28. End Class
    29. Public Class Tag
    30. Public Property name As String
    31. Public Property url As String
    32. End Class
    33. Public Class Tags
    34. Public Property tag As Tag()
    35. End Class
    36. Public Class Wiki
    37. Public Property published As String
    38. Public Property summary As String
    39. Public Property content As String
    40. End Class
    41. Public Class Album
    42. Public Property name As String
    43. Public Property artist As String
    44. Public Property mbid As String
    45. Public Property url As String
    46. Public Property image As Image()
    47. Public Property listeners As String
    48. Public Property playcount As String
    49. Public Property tracks As Tracks
    50. Public Property tags As Tags
    51. Public Property wiki As Wiki
    52. End Class
    53. Public Class clsfmLast
    54. Public Property album As Album
    55. End Class
    56. End Class


    wie komme ich jetzt an die werte ?
    funktioniert nicht....

    Der verweis auf einen nicht freigegebenen member erfordert einen objektverweis...

    bitte noch 1x helfen....ich arbeite zum ersten mal damit und stehe echt auf dem schlauch

    wenn ich mir "FmLast" so anschaue, steht da nur der klassenname drin ohne attribute oder so

    erstmal danke für deine geduld eine deine hilfe :)

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

    habe ich auch versucht....klappt auch nicht....ich komme nicht an die werte....

    Hier nochmal die klasse:

    VB.NET-Quellcode

    1. Public Class clsfmLast
    2. Public Class Image
    3. Public Property text As String
    4. Public Property size As String
    5. End Class
    6. Public Class Attr
    7. Public Property rank As String
    8. End Class
    9. Public Class Streamable
    10. Public Property text As String
    11. Public Property fulltrack As String
    12. End Class
    13. Public Class Artist
    14. Public Property name As String
    15. Public Property mbid As String
    16. Public Property url As String
    17. End Class
    18. Public Class Track
    19. Public Property name As String
    20. Public Property url As String
    21. Public Property duration As String
    22. Public Property attr As Attr
    23. Public Property streamable As Streamable
    24. Public Property artist As Artist
    25. End Class
    26. Public Class Tracks
    27. Public Property track As Track()
    28. End Class
    29. Public Class Tag
    30. Public Property name As String
    31. Public Property url As String
    32. End Class
    33. Public Class Tags
    34. Public Property tag As Tag()
    35. End Class
    36. Public Class Wiki
    37. Public Property published As String
    38. Public Property summary As String
    39. Public Property content As String
    40. End Class
    41. Public Class Album
    42. Public Property name As String
    43. Public Property artist As String
    44. Public Property mbid As String
    45. Public Property url As String
    46. Public Property image As Image()
    47. Public Property listeners As String
    48. Public Property playcount As String
    49. Public Property tracks As Tracks
    50. Public Property tags As Tags
    51. Public Property wiki As Wiki
    52. End Class
    53. Public Class clsfmLast
    54. Public Property album As Album
    55. End Class
    56. End Class


    in der ide bekomme ich die attribute auch nicht vorgeschlagen. ich komme z.b. nur bis "FmLast.Artist". danach ist schluß und er wirft "clsFmLast" ist ein klassentyp und kann nicht als ausdruck verwendet werden" raus

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „woeh“ ()

    Gibt's da nicht auch eine Überladung, der du direkt den JSON-String angeben kannst?

    Visual Basic-Quellcode

    1. FmLast = JsonConvert.DeserializeObject(source)

    Ich habe im Moment leider keine Testumgebung zur Hand, dass ich dir's vorkauen könnte.
    Aber du bist zumindest schon mal nah dran.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --