无法将当前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服务器已关闭或数据库服务器不可用。
- 我们目前无法使用您的PayPal帐户处理您的付款
- 如何通过引用发送字符串来修改该字符串的非托管C库?
- 从Google OpenID迁移到新的OAuth 2
- 当DataSource没有返回完整的结果集时,手动设置GridView的PageCount?
- DataGridViewComboBoxColumn:限制MaxDropDownItems
- 由于导入C ++ DLL,C#ShowDialog()抛出错误
- 在Sql Server连接字符串中使用Encrypt = yes – >“provider:SSL Provider,error:0 – 证书的CN名称与传递的值不匹配。”
- 无法使用NHibernate登记分布式事务
- 超时模式 – Thread.Abort真的有多糟糕?