Cannot Json deserialize Youtube data with VB.net

后端 未结 1 1577
野性不改
野性不改 2020-12-22 07:05

I need to obtain the \"title\" from the response i get from Youtube. I get the following error at line 8, position 12, that is, at line:

\"items\": [
         


        
1条回答
  •  礼貌的吻别
    2020-12-22 07:51

    You are getting that exception because you have declared several auto-implemented array properties incorrectly. As shown in Auto-Implemented Properties (Visual Basic) such properties should be declared as follows, with the () array indicator as part of the return type:

    Public Property items As Item()
    

    Instead you declare them as follows:

    Public Property items() As Item
    

    This declares a property returning a single Item rather than an array of them. The () attached to the property name is optional; for parameterless properties it is redundant but for properties taking parameters the argument list appears there. See the documentation page Property Statement for details. Then Json.NET throws the exception you see when attempting to deserialize a JSON array into one of the non-array properties in your model.

    To fix this, three of your classes should be modified as follows:

    Public Class Rootobject
        Public Property kind As String
        Public Property etag As String
        Public Property pageInfo As Pageinfo
    
        Public Property items As Item()   ' Fixed 
    
    End Class
    
    Public Class Snippet
        Public Property publishedAt As Date
        Public Property channelId As String
        Public Property title As String
        Public Property description As String
        Public Property thumbnails As Thumbnails
        Public Property channelTitle As String
    
        Public Property tags As String()   ' Fixed 
    
        Public Property categoryId As String
        Public Property liveBroadcastContent As String
        Public Property localized As Localized
    End Class
    
    Public Class Regionrestriction
    
        Public Property allowed As String()   ' Fixed 
    
    End Class
    

    Then, since the items are an array, to access the titles and put then in a list, you can use extension methods from System.Linq.Enumerable:

    ' Convert the json string to RootObject.
    Dim root = JsonConvert.DeserializeObject(Of Rootobject)(json)
    
    ' Extract the list of titles.
    Dim titles = root.items _
        .Select(Function(i) i.snippet.title) _
        .ToList()
    
    ' Get the first title in the list.
    Dim firstTitle = titles.FirstOrDefault()
    
    Console.WriteLine("First title = ""{0}""", firstTitle)
    

    Which prints out First title = "Blur - Song 2".

    Sample VB.Net fiddle.

    0 讨论(0)
提交回复
热议问题