Невозможно десериализовать текущий объект 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.NET XPath, SelectNodes XML, SelectSingleNode?
  • Обеспечение json-ключей в .NET
  • Отключить использование JSON.net
  • Каков правильный способ использования JSON.NET для анализа streamа объектов JSON?
  • Сериализация типа Json.Net с полиморфным дочерним объектом
  • Разбор JSON в C #
  • Частные сеттеры в Json.Net
  • Невозможно сериализовать словарь с помощью сложного ключа с помощью Json.net
  • Как использовать JSON.NET для десериализации в вложенный / рекурсивный словарь и список?
  • Как установить Json.Net в качестве сериализатора по умолчанию для службы WCF REST
  • JsonValueProviderFactory выбрасывает «запрос слишком большой»
  • Давайте будем гением компьютера.