为了账号安全,请及时绑定邮箱和手机立即绑定

无法将当前JSON对象(例如{“ name”:“ value”})反序列化为类型

无法将当前JSON对象(例如{“ name”:“ value”})反序列化为类型

白衣染霜花 2019-11-20 10:11:50
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<RootObject> datalist = JsonConvert.DeserializeObject<List<RootObject>>(jsonstring);        }        public class Datum        {            public Int64 target_id { get; set; }            public string target_type { get; set; }        }        public class RootObject        {                      public List<Datum> data { get; set; }        }    }}无法反序列化当前JSON对象(例如{“ name”:“ value”})为类型'System.Collections.Generic.List`1 [facebook.Program + RootObject]',因为该类型需要JSON数组(例如[1, 2,3])正确反序列化。要解决此错误,可以将JSON更改为JSON数组(例如[1,2,3]),也可以更改反序列化类型,使其成为普通的.NET类型(例如,不像整数这样的原始类型,也不像这样的集合类型)数组或列表)可以是我看了其他帖子。我的json看起来像这样:{"data":[{"target_id":9503123,"target_type":"user"}]}
查看完整描述

3 回答

?
MM们

TA贡献1886条经验 获得超2个赞

为了清楚起见,除了@SLaks的答案,这意味着您需要更改此行:


List<RootObject> datalist = JsonConvert.DeserializeObject<List<RootObject>>(jsonstring);

像这样:


RootObject datalist = JsonConvert.DeserializeObject<RootObject>(jsonstring);


查看完整回答
反对 回复 2019-11-20
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

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

您想反序列化为单个RootObject


查看完整回答
反对 回复 2019-11-20
?
料青山看我应如是

TA贡献1772条经验 获得超7个赞

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


HttpResponseMessage response = await client.GetAsync("api/yourUrl");


if (response.IsSuccessStatusCode)

{

    IEnumerable<RootObject> rootObjects =

        awaitresponse.Content.ReadAsAsync<IEnumerable<RootObject>>();


    foreach (var rootObject in rootObjects)

    {

        Console.WriteLine(

            "{0}\t${1}\t{2}",

            rootObject.Data1, rootObject.Data2, rootObject.Data3);

    }


    Console.ReadLine();

}

希望能帮助到你。


查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 1473 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信