Невозможно десериализовать текущий объект 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 выглядит так:
- В чем разница между PreserveReferencesHandling и ReferenceLoopHandling в Json.Net?
- json.net: указать конвертер для ключей словаря
- JSON.NET: зачем использовать JToken - когда-либо?
- Использование пользовательской десериализации тела WCF без изменения десериализации шаблона URI
- Как получить json.net для сериализации членов classа, полученных из List ?
{"data":[{"target_id":9503123,"target_type":"user"}]}
- Исключить свойство из сериализации через пользовательский атрибут (json.net)
- Как я могу объединить два объекта JObject?
- Порядок сериализованных полей с использованием JSON.NET
- Как я могу десериализовать JSON для простого словаря в ASP.NET?
- Как игнорировать свойство в classе, если null, используя json.net
- C # JSON.NET - десериализация ответа, использующего необычную структуру данных
- как десериализовать JSON в IEnumerable с помощью Newtonsoft JSON.NET
- ТипNameHandling предостережение в Newtonsoft Json
Чтобы было понятно, в дополнение к ответу @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);
Надеюсь это поможет.