Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法将当前JSON对象(例如,{quot;name";:“value";})反序列化为类型';System.Collections.Generic.List`1_C#_Json_Facebook_Json.net - Fatal编程技术网

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

C# 无法将当前JSON对象(例如,{quot;name";:“value";})反序列化为类型';System.Collections.Generic.List`1,c#,json,facebook,json.net,C#,Json,Facebook,Json.net,由于错误消息很难告诉您,您无法将单个对象反序列化为集合(List) 除了@SLaks的答案外,您还希望反序列化为单个RootObject,这意味着您需要更改此行: {"data":[{"target_id":9503123,"target_type":"user"}]} List datalist=JsonConvert.DeserializeObject(jsonstring); 对这样的事情: List<RootObject> datalist = JsonConvert.D

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


除了@SLaks的答案外,您还希望反序列化为单个
RootObject

,这意味着您需要更改此行:

{"data":[{"target_id":9503123,"target_type":"user"}]}
List datalist=JsonConvert.DeserializeObject(jsonstring);
对这样的事情:

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

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

RootObject datalist = JsonConvert.DeserializeObject<RootObject>(jsonstring);
httpresponsemessageresponse=wait client.GetAsync(“api/yourUrl”);
if(响应。IsSuccessStatusCode)
{
IEnumerable根对象=
waitresponse.Content.ReadAsAsync();
foreach(rootObjects中的var rootObject)
{
控制台写入线(
“{0}\t${1}\t{2}”,
rootObject.Data1、rootObject.Data2、rootObject.Data3);
}
Console.ReadLine();
}

希望有帮助。

真正的问题是,您在FacebookClient获取方法中使用了动态返回类型。尽管您使用了序列化方法,但JSON转换器在此之后无法反序列化此对象

使用代替:

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();
}
诸如此类:

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();
var datalist=JsonConvert.DeserializeObject(结果);

希望这有帮助。

您能尝试在不使用下面的
数据
键的情况下更改json吗

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

有一个根对象(
{“data”):..}
,而不是它们的列表。令人困惑的是,为什么它不将任何内容或单个值放入空数组中,然后“执行”。如果我使用旧的
DataContractJsonSerializer(typeof(string[]).ReadObject()…
执行此操作,即使要反序列化到
string[]
的字符串是“{}”[{“target_id”:9503123,“target_type”:“user”},{“target_id”:9503123,“target_type”:“user”}]没有外部的花括号,除非RootObject已经是一个列表
var datalist = JsonConvert.DeserializeObject<List<RootObject>>(result);
[{"target_id":9503123,"target_type":"user"}]