无法将当前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类型(例如,不是像整数这样的基本类型,而不是类似的集合类型一个数组或List)可以

我查看了其他post。

我的json看起来像这样:

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

为了说清楚,除了@SLaks的答案,这意味着你需要改变这一行:

 List datalist = JsonConvert.DeserializeObject>(jsonstring); 

这样的事情:

 RootObject datalist = JsonConvert.DeserializeObject(jsonstring); 

由于错误消息很难告诉您,您无法将单个对象反序列化为集合( List<> )。

您想要反序列化为单个RootObject

这也发生在我身上,因为我试图获得一个IEnumerable但响应只有一个值。 请尝试确保它是您的回复中的数据列表。 我使用(用于api url获取)解决问题的行是这样的:

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

希望能帮助到你。

真正的问题是你在FacebookClient Get方法中使用动态返回类型。 虽然您使用方法进行序列化,但JSON转换器在此之后无法反序列化此Object。

使用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); 

希望这可以帮助。

您的SQL服务器已关闭或数据库服务器不可用。