2017-09-21 287 views
0

我總是得到錯誤:反序列化這個JSON字符串

Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'System.Collections.Generic.List`1[Test.Form15+results[]]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.

To fix this error either change the JSON to a JSON array (e.g. [1,2,3]) or change the deserialized type so that it is a normal .NET type (e.g. not a primitive type like integer, not a collection type like an array or List) that can be deserialized from a JSON object. JsonObjectAttribute can also be added to the type to force it to deserialize from a JSON object.

Path 'result', line 1, position 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 
+0

使用Visual Studio **編輯菜單** - > **選擇性粘貼** - > **粘貼爲JSON類**製作課程。他們可能需要調整 – Plutonix

+1

@Plutonix向下滾動代碼示例 – djv

回答

0

我會用List(Of Result)類型與初始化如下:

Public Class results 
    <JsonProperty("result")> 
    Public Property Result As New List(Of Result) 
End Class 
+0

謝謝,真的有幫助。 – Kaallis