2016-10-23 2 views
0

У меня есть веб-жерех API, который возвращает значение в следующем формате:Зачем нужна ошибка Не удается десериализовать текущий объект JSON?

{"idDoc":18,"idDocRipristino":0,"relCau":1,"numDoc":"2","data":"2016-10-17T00:00:00","relTavolo":3,"apertura":"4","orario":"2016-10-17T00:00:00","idAna":0,"nominativo":"5","relOpe":6,"totale":7.0,"note":"8","idAsp":0,"romana":0,"relOpe_Port":0}

И я использую следующий код из Winform Application, чтобы связать данные с DevExpress GridView, но я получаю ошибку ниже :

Additional information: Cannot deserialize the current JSON object (e.g. {"name":"value"}) into type 'WinFormVB.Documenti[]' because the type requires a JSON array (e.g. [1,2,3]) to deserialize correctly.

Вот мой WinForm код для доступа к API и чтение данных с помощью JSON:

 Async Sub GetDocumenti(idDoc As Integer) 
    Dim Uri As String = "http://localhost:53917/api/Documenti/GetByIdDoc" 
    Using client = New HttpClient() 
     Using response = Await client.GetAsync([String].Format("{0}/{1}", Uri, idDoc)) 
      If response.IsSuccessStatusCode Then 
       Dim DocumentisonData = Await response.Content.ReadAsStringAsync() 
       GridCtrlDocumenti.DataSource = JsonConvert.DeserializeObject(Of Documenti())(DocumentisonData).ToList() 
      Else 
       Dim result = DevExpress.XtraEditors.XtraMessageBox.Show("Sorry no data found!!", "Confirmation Message", MessageBoxButtons.OK, MessageBoxIcon.Exclamation) 

      End If 
     End Using 
    End Using 
End Sub 

Это мой Repository:

public DocumentiModel GetByIdDoc(int id) 
    { 
     using (var dbCtx = new USDevEntities()) 
     { 
      var documenti = dbCtx.Documentis.Where(x => x.IDDoc == id).FirstOrDefault(); 
      if (documenti != null) 
      { 
       return ConvertTo(documenti); 
      } 
      else 
      { 
       return null; 
      } 
     } 
    } 

Пожалуйста, предложите мне, как решить эту ошибку. Благодарю.

+0

JSON только один объект, но вы пытаетесь сериализовать его как массив. – Styxxy

+0

Я очень новичок в JSON, не могли бы вы дать мне пример, чтобы решить мою проблему или проиллюстрировать ваш ответ? – barsan

+0

Пожалуйста, покажите класс 'Documenti' – Jim

ответ

3

Ваш JSON представляет собой один объект, а ваш код пытается десериализоваться в массив. Это не сработает.

Изменить эту строку:

GridCtrlDocumenti.DataSource = JsonConvert.DeserializeObject(Of Documenti())(DocumentisonData).ToList() 

Для этого:

Dim list As List(Of Documenti) = New List(Of Documenti) 
list.Add(JsonConvert.DeserializeObject(Of Documenti)(DocumentisonData)) 
GridCtrlDocumenti.DataSource = list 
+0

Большое вам спасибо. Он работает сейчас. Еще раз спасибо. – barsan

+1

Рад, что я мог помочь. –

+0

Абсолютно вы спасли мои часы. +1 – barsan