猿问

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

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"}]}


白衣染霜花
浏览 1568回答 3
3回答

MM们

为了清楚起见,除了@SLaks的答案,这意味着您需要更改此行:List<RootObject> datalist = JsonConvert.DeserializeObject<List<RootObject>>(jsonstring);像这样:RootObject datalist = JsonConvert.DeserializeObject<RootObject>(jsonstring);

慕田峪7331174

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

料青山看我应如是

这也发生在我身上,因为我试图获取一个,IEnumerable但是响应只有一个值。请尝试确保它是您的回复中的数据列表。我用于(用于api url get)解决问题的行如下所示:HttpResponseMessage response = await client.GetAsync("api/yourUrl");if (response.IsSuccessStatusCode){&nbsp; &nbsp; IEnumerable<RootObject> rootObjects =&nbsp; &nbsp; &nbsp; &nbsp; awaitresponse.Content.ReadAsAsync<IEnumerable<RootObject>>();&nbsp; &nbsp; foreach (var rootObject in rootObjects)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; Console.WriteLine(&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "{0}\t${1}\t{2}",&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; rootObject.Data1, rootObject.Data2, rootObject.Data3);&nbsp; &nbsp; }&nbsp; &nbsp; Console.ReadLine();}希望能帮助到你。
随时随地看视频慕课网APP
我要回答