Невозможно десериализовать текущий объект JSON (например, {“name”: “value”}) в тип ‘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; } } } } 

Невозможно десериализовать текущий объект JSON (например, {“name”: “value”}) в тип ‘System.Collections.Generic.List`1 [facebook.Program + RootObject]’, потому что для этого требуется массив JSON (например, [1, 2,3]) для десериализации. Чтобы исправить эту ошибку, либо измените JSON на массив JSON (например, [1,2,3]), либо измените десериализованный тип, чтобы он был обычным типом .NET (например, не примитивным типом типа integer, а не типом коллекции, например массив или список), которые могут быть

Я посмотрел на другие сообщения.

Мой json выглядит так:

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

Чтобы было понятно, в дополнение к ответу @SLaks, это означало, что вам нужно изменить эту строку:

 List datalist = JsonConvert.DeserializeObject>(jsonstring); 

к чему-то вроде этого:

 RootObject datalist = JsonConvert.DeserializeObject(jsonstring); 

Поскольку сообщение об ошибке очень сложно сказать вам, вы не можете десериализовать один объект в коллекцию ( List<> ).

Вы хотите десериализовать в один RootObject .

Это случилось и со мной, потому что я пытался получить IEnumerable но ответ имел единственное значение. Пожалуйста, постарайтесь убедиться, что это список данных в вашем ответе. Линии, которые я использовал (для api url get) для решения проблемы, следующие:

 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(); } 

Надеюсь, поможет.

Реальная проблема заключается в том, что вы используете динамический тип возврата в методе GetClickClickClient . И хотя вы используете метод для сериализации, конвертер JSON не может десериализовать этот объект после этого.

Использование insted из:

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

что-то вроде того:

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

Затем вы можете использовать метод DeserializeObject :

 var datalist = JsonConvert.DeserializeObject>(result); 

Надеюсь это поможет.

  • Как я могу разбирать JSON с C #?
  • Json.NET: десериализация вложенных словарей
  • Разбор JSON в C #
  • Десериализация JSON с использованием JSon.NET с динамическими данными
  • Не удалось загрузить файл или сборку «Newtonsoft.Json» или одну из его зависимостей. Определение манифеста не соответствует ссылке на сборку
  • Поиск конкретного JToken по имени в иерархии JObject
  • как десериализовать JSON в IEnumerable с помощью Newtonsoft JSON.NET
  • Сериализовать контейнер перечислений в виде строк с помощью JSON.net
  • Объединение двух массивов Json.NET путем конкатенации содержащихся элементов
  • Deserialize json с известными и неизвестными полями
  • Ошибка при запуске JSON.NET при сериализации Mongo ObjectId
  • Давайте будем гением компьютера.