无法将当前JSON对象(例如{"name":"value"})反序列化为类型'System.Collections.Generic.List`1

use*_*519 38 c# json facebook json.net

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; }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

无法将当前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"}]}
Run Code Online (Sandbox Code Playgroud)

har*_*r07 42

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

List<RootObject> datalist = JsonConvert.DeserializeObject<List<RootObject>>(jsonstring);
Run Code Online (Sandbox Code Playgroud)

这样的事情:

RootObject datalist = JsonConvert.DeserializeObject<RootObject>(jsonstring);
Run Code Online (Sandbox Code Playgroud)

  • 这是行不通的,除非 RootObject 已经是一个 List&lt;&gt; (3认同)

SLa*_*aks 14

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

您想要反序列化为单个RootObject.


dda*_*san 6

您可以尝试在没有密钥的情况下更改您的 json 吗data?如下所示?

[{"target_id":9503123,"target_type":"user"}]
Run Code Online (Sandbox Code Playgroud)

  • [{"target_id":9503123,"target_type":"user"},{"target_id":9503123,"target_type":"user"}] 没有外部大括号 (2认同)

小智 5

这也发生在我身上,因为我试图获得一个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();
}
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。