无法将当前 JSON 对象(例如 "name":"value")反序列化为类型 'System.Collections.Generic.List`1
Posted
技术标签:
【中文标题】无法将当前 JSON 对象(例如 "name":"value")反序列化为类型 \'System.Collections.Generic.List`1【英文标题】:Cannot deserialize the current JSON object (e.g. "name":"value") into type 'System.Collections.Generic.List`1无法将当前 JSON 对象(例如 "name":"value")反序列化为类型 'System.Collections.Generic.List`1 【发布时间】:2014-02-16 23:18:42 【问题描述】: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"]
【问题讨论】:
有一个根对象("data": ..
),不是它们的列表。
【参考方案1】:
为了清楚起见,除了@SLaks 的回答之外,这意味着您需要更改这一行:
List<RootObject> datalist = JsonConvert.DeserializeObject<List<RootObject>>(jsonstring);
到这样的事情:
RootObject datalist = JsonConvert.DeserializeObject<RootObject>(jsonstring);
【讨论】:
这行不通,除非 RootObject 已经是一个 List【参考方案2】:由于错误消息很难告诉您,您无法将单个对象反序列化为集合 (List<>
)。
您想反序列化为单个 RootObject
。
【讨论】:
令人困惑的是,为什么它不只是将任何内容或单个值放入空数组中,而只是“执行”。如果我使用旧的DataContractJsonSerializer(typeof(string[])).ReadObject()...
执行此操作,它就可以工作,即使要反序列化为string[]
的字符串是''【参考方案3】:
这也发生在我身上,因为我试图获得 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\t2",
rootObject.Data1, rootObject.Data2, rootObject.Data3);
Console.ReadLine();
希望对你有帮助。
【讨论】:
【参考方案4】:您可以尝试在没有data
键的情况下更改您的 json,如下所示?
["target_id":9503123,"target_type":"user"]
【讨论】:
["target_id":9503123,"target_type":"user","target_id":9503123,"target_type":"user"] 没有外大括号【参考方案5】:真正的问题是您在 FacebookClient Get 方法 中使用了 dynamic 返回类型。尽管您使用了一种序列化方法,但 JSON 转换器无法在此之后反序列化此 Object。
使用 insted of:
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<List<RootObject>>(result);
希望这会有所帮助。
【讨论】:
以上是关于无法将当前 JSON 对象(例如 "name":"value")反序列化为类型 'System.Collections.Generic.List`1的主要内容,如果未能解决你的问题,请参考以下文章
无法将当前 JSON 对象(例如 "name":"value")反序列化为类型 'System.Collections.Generic.List`1
JSON.Net - 无法将当前 json 对象(例如 "name":"value")反序列化为类型 'system.collections.generic.l
Blazor WASM“无法反序列化当前 JSON 对象(例如 "name":"value")”错误
无法将 JSON 数组(例如 [1,2,3])反序列化为类型 ' ',因为类型需要 JSON 对象(例如 "name":"value")才能正确反序列化
无法将 JSON 数组(例如 [1,2,3])反序列化为类型 ' ',因为类型需要 JSON 对象(例如 "name":"value")才能正确反序列化
无法将 JSON 数组(例如 [1,2,3])反序列化为类型 ' ',因为类型需要 JSON 对象(例如 "name":"value")来反序列化 withGe