Imansible deserializzare l’object JSON corrente (ad esempio {“nome”: “valore”}) in tipo “System.Collections.Generic.List`1

using System; using System.Collections.Generic; using System.Linq; using System.Text; using Facebook; using Newtonsoft.Json; namespace facebook { class Program { static void Main(string[] args) { var client = new FacebookClient(acc_ess); dynamic result = client.Get("fql", new { q = "select target_id,target_type from connection where source_id = me()"}); string jsonstring = JsonConvert.SerializeObject(result); //jsonstring {"data":[{"target_id":9503123,"target_type":"user"}]} List datalist = JsonConvert.DeserializeObject<List>(jsonstring); } public class Datum { public Int64 target_id { get; set; } public string target_type { get; set; } } public class RootObject { public List data { get; set; } } } } 

Imansible deserializzare l’object JSON corrente (ad esempio {“nome”: “valore”}) nel tipo “System.Collections.Generic.List`1 [facebook.Program + RootObject]” perché il tipo richiede un array JSON (ad esempio [1, 2,3]) per deserializzare correttamente. Per correggere questo errore cambia il JSON in un array JSON (ad esempio [1,2,3]) o cambia il tipo deserializzato in modo che sia un normale tipo .NET (ad esempio non un tipo primitivo come intero, non un tipo di raccolta come un array o elenco) che può essere

Ho guardato altri post.

Il mio json ha questo aspetto:

 {"data":[{"target_id":9503123,"target_type":"user"}]} 

Per chiarire, oltre alla risposta di @SLaks, ciò significava che è necessario modificare questa linea:

 List datalist = JsonConvert.DeserializeObject>(jsonstring); 

a qualcosa di simile:

 RootObject datalist = JsonConvert.DeserializeObject(jsonstring); 

Poiché il messaggio di errore sta tentando molto bene di dirti, non è ansible deserializzare un singolo object in una raccolta ( List<> ).

RootObject in un singolo RootObject .

È successo anche a me, perché stavo cercando di ottenere un object IEnumerable ma la risposta aveva un solo valore. Prova a verificare che si tratti di un elenco di dati nella tua risposta. Le linee che ho usato (per api url get) per risolvere il problema sono come queste:

 HttpResponseMessage response = await client.GetAsync("api/yourUrl"); if (response.IsSuccessStatusCode) { IEnumerable rootObjects = awaitresponse.Content.ReadAsAsync>(); foreach (var rootObject in rootObjects) { Console.WriteLine( "{0}\t${1}\t{2}", rootObject.Data1, rootObject.Data2, rootObject.Data3); } Console.ReadLine(); } 

Spero che sia d’aiuto.

Il vero problema è che stai usando il tipo di ritorno dinamico nel metodo FacebookClient Get . E sebbene tu usi un metodo per serializzare, il convertitore JSON non può deserializzare questo object dopo questo.

Utilizzare insted di:

 dynamic result = client.Get("fql", new { q = "select target_id,target_type from connection where source_id = me()"}); string jsonstring = JsonConvert.SerializeObject(result); 

qualcosa del genere:

 string result = client.Get("fql", new { q = "select target_id,target_type from connection where source_id = me()"}).ToString(); 

Quindi puoi usare il metodo DeserializeObject :

 var datalist = JsonConvert.DeserializeObject>(result); 

Spero che questo ti aiuti.