Десериализовать эту строку JSON

Я всегда получаю ошибку:

Невозможно десериализовать текущий объект JSON (например, {имя:значение}) в тип «System.Collections.Generic.List`1[Test.Form15+results[]]», поскольку для этого типа требуется массив JSON (например, [1,2, 3]) для правильной десериализации.

Чтобы исправить эту ошибку, либо измените JSON на массив JSON (например, [1,2,3]), либо измените десериализованный тип, чтобы он был обычным типом .NET (например, не примитивный тип, такой как целое число, а не тип коллекции, такой как массив или список), который можно десериализовать из объекта JSON. JsonObjectAttribute также можно добавить к типу, чтобы заставить его десериализоваться из объекта JSON.

Путь 'результат', строка 1, позиция 10.

Мой код выглядит следующим образом, и я не уверен, что это двойные кавычки, вызывающие проблемы, или скобка в начале строки json. Любые советы будут оценены.

Public Class Form15

Public Class UTicketContact

    <JsonProperty("display_value")>
    Public Property DisplayValue As String

    <JsonProperty("link")>
    Public Property Link As String
End Class

Public Class URequestedFor

    <JsonProperty("display_value")>
    Public Property DisplayValue As String

    <JsonProperty("link")>
    Public Property Link As String
End Class

Public Class AssignedTo

    <JsonProperty("display_value")>
    Public Property DisplayValue As String

    <JsonProperty("link")>
    Public Property Link As String
End Class

Public Class OpenedBy

    <JsonProperty("display_value")>
    Public Property DisplayValue As String

    <JsonProperty("link")>
    Public Property Link As String
End Class

Public Class AssignmentGroup

    <JsonProperty("display_value")>
    Public Property DisplayValue As String

    <JsonProperty("link")>
    Public Property Link As String
End Class

Public Class Result

    <JsonProperty("u_ticket_contact")>
    Public Property UTicketContact As UTicketContact

    <JsonProperty("u_requested_for")>
    Public Property URequestedFor As URequestedFor

    <JsonProperty("assigned_to")>
    Public Property AssignedTo As AssignedTo

    <JsonProperty("opened_by")>
    Public Property OpenedBy As OpenedBy

    <JsonProperty("assignment_group")>
    Public Property AssignmentGroup As AssignmentGroup
End Class

Public Class results

    <JsonProperty("result")>
    Public Property Result As Result()
End Class


Function FindRequestedFor(ByVal instancename As String,
                          ByVal rtask As String) As String

    Dim requestedfor As String = ""
    'Dim byteArray As Byte() = Encoding.UTF8.GetBytes(postData)

    Dim accessToken As String = GenerateToken("instancenameredacted",
                                              "clientIdredacted",
                                              "clientSecretredacted",
                                              "accountredacted",
                                              "accountpasswordredacted")

    Dim url As String = "https://" & instancename & ".service-now.com/api/ubis2/request/rtask?query=number%3D" & rtask

    Dim request As WebRequest = WebRequest.Create(url)
    Dim dataStream As Stream

    request.ContentType = "application/json; charset=utf-8"
    request.Method = "GET"
    request.Headers.Add("Authorization", "Bearer " & accessToken)
    dataStream = request.GetResponse.GetResponseStream

    Dim reader As New StreamReader(dataStream)
    Dim responseFromServer As String = reader.ReadToEnd
'Format of the JSON string is:     ""{
  ""result"": [
    {
      ""u_ticket_contact"": {
        ""display_value"": ""Name1"",
        ""link"": ""https://instance.service-now.com/api/now/table/sys_user/470104cf600ad400808370bee6ad2596""
      },
      ""u_requested_for"": {
        ""display_value"": ""Name2"",
        ""link"": ""https://instance.service-now.com/api/now/table/sys_user/470104cf600ad400808370bee6ad2596""
      }, 
      ""assigned_to"": {
        ""display_value"": ""Name3"",
        ""link"": ""https://instance.service-now.com/api/now/table/sys_user/98c7a3e5ac723040773cf2044a10de0c""
      },
      ""opened_by"": {
        ""display_value"": ""Name4"",
        ""link"": ""https://instance.service-now.com/api/now/table/sys_user/470104cf600ad400808370bee6ad2596""
      },
      ""assignment_group"": {
        ""display_value"": ""Group Name1"",
        ""link"": ""https://instance.service-now.com/api/now/table/sys_user_group/bad979fa19c44a40b5a0d99e2b982e75""
      }
    }
  ]
}""
    Console.WriteLine(responseFromServer)

    reader.Close()
    dataStream.Close()

    Dim test = JsonConvert.DeserializeObject(Of List(Of results()))(responseFromServer)
End Function
end class

person Kaallis    schedule 21.09.2017    source источник
comment
используйте Меню редактирования Visual Studio -› Специальная вставка -› Вставить как классы Json, чтобы создать классы. Хотя они могут нуждаться в настройке   -  person Ňɏssa Pøngjǣrdenlarp    schedule 21.09.2017
comment
@Plutonix прокрутите пример кода вниз   -  person djv    schedule 21.09.2017


Ответы (1)


Я бы использовал тип List(Of Result) с инициализацией, как показано ниже:

Public Class results
    <JsonProperty("result")>
    Public Property Result As New List(Of Result)
End Class
person Gabor    schedule 22.09.2017
comment
Спасибо, это действительно помогло. - person Kaallis; 22.09.2017