Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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反序列化到列表中_C#_Json_List_Object_Serialization - Fatal编程技术网

c#将json反序列化到列表中

c#将json反序列化到列表中,c#,json,list,object,serialization,C#,Json,List,Object,Serialization,我有一段从API链接检索Json字符串的代码。Json被反序列化并返回到文本框。只要只有1个Json值,并且返回的值超过1个,则此操作就可以正常工作。它会因以下错误而崩溃: 其他信息:无法反序列化当前JSON数组 (例如[1,2,3])转换为类型“GW2_tradingPost.RootObject”,因为 需要一个JSON对象(例如{“name”:“value”})来反序列化 没错 要修复此错误,请将JSON更改为JSON对象(例如。 {“name”:“value”})或将反序列化类型更改为数

我有一段从API链接检索Json字符串的代码。Json被反序列化并返回到文本框。只要只有1个Json值,并且返回的值超过1个,则此操作就可以正常工作。它会因以下错误而崩溃:

其他信息:无法反序列化当前JSON数组 (例如[1,2,3])转换为类型“GW2_tradingPost.RootObject”,因为 需要一个JSON对象(例如{“name”:“value”})来反序列化 没错

要修复此错误,请将JSON更改为JSON对象(例如。 {“name”:“value”})或将反序列化类型更改为数组或 实现集合接口的类型(例如ICollection、IList) 类似于可以从JSON数组反序列化的列表。 还可以将JsonArrayAttribute添加到类型中,以强制它 从JSON数组反序列化

在我的研究中,发生这种情况是因为没有地方存放Json,因为它不是一个列表

我已经尝试过这个代码和各种类似的代码

List<RootObject> list = JsonConvert.DeserializeObject<List<RootObject>>(jsonReader.ToString());
return list;
在这种情况下,json是一个单独的ID,因此可以正常工作

但是当检索多个ID时,就像这里一样,它会中断。
为多个ID提供的链接返回一个整数数组。我建议对其进行如下分析:

var ids = JsonConvert.DeserializeObject<int[]>(jsonReader.ToString())
var id=JsonConvert.DeserializeObject(jsonReader.ToString())
正如您所说,您的代码适用于单个项目,因此您可以对每个单独的请求使用现有代码,而不是点击
https://api.guildwars2.com/v2/commerce/listings
,将点击
https://api.guildwars2.com/v2/commerce/listings/{id}
可以使用的
string.Format()
在需要的地方添加


认真考虑在<代码> INT[]/CODE中返回的ID有多少,但实际上你想获取根对象,如从我所看到的,它将返回很多请求。p> 这里有一个简单的解决方案,可以获得所有id的列表,但需要花费大量的时间来查看所有id

  List<RootObject> rootobject = new List<RootObject>();
    using (var webclient = new WebClient())
    {
        var Ids = webclient.DownloadString(" https://api.guildwars2.com/v2/commerce/listings");
        foreach (var id in Ids.Substring(1, s.Length-2).Split(','))
        {
            string url = string.Format("{0}/{1}","https://api.guildwars2.com/v2/commerce/listings",id);
            var res = webclient.DownloadString(url);
            var jsonObject = JsonConvert.DeserializeObject<RootObject>(res);
            rootobject.Add(jsonObject);
        }


    }
List rootobject=new List();
使用(var webclient=new webclient())
{
var id=webclient.DownloadString(“https://api.guildwars2.com/v2/commerce/listings");
foreach(id.Substring(1,s.Length-2)中的变量id.Split(','))
{
字符串url=string.Format(“{0}/{1}”https://api.guildwars2.com/v2/commerce/listings“,id);
var res=webclient.DownloadString(url);
var jsonObject=JsonConvert.DeserializeObject(res);
添加(jsonObject);
}
}

我们可以看看您试图解析的json的示例吗?当您试图反序列化到根对象列表时,但在根对象级别,它试图解析列表,因此我的想法是您已经嵌套了lists@DavidWatts我编辑了这篇文章,在底部有两个Api链接,可以显示Json的样子。它们返回完全不同的内容。多ID的链接返回一个整数数组,我要说的是单个列表的ID。看起来您必须查询所有列表,然后针对每个列表运行另一个列表以获取实际对象。尝试一下,如果它有效,我会给出一个答案,否则,我会继续尝试帮助我如何查询所有列表?查询数据库不相关吗?当您进行API调用以检索多个ID时,将在其端运行查询。我建议您对多个ID进行调用,并将其反序列化为int[],然后在完成后,使用
foreach
循环分别对每个ID进行请求。这将是一个地狱般的大量web请求,但如果您要在显示器中对它们进行分页,您只需要对显示的数量进行请求
var ids = JsonConvert.DeserializeObject<int[]>(jsonReader.ToString())
  List<RootObject> rootobject = new List<RootObject>();
    using (var webclient = new WebClient())
    {
        var Ids = webclient.DownloadString(" https://api.guildwars2.com/v2/commerce/listings");
        foreach (var id in Ids.Substring(1, s.Length-2).Split(','))
        {
            string url = string.Format("{0}/{1}","https://api.guildwars2.com/v2/commerce/listings",id);
            var res = webclient.DownloadString(url);
            var jsonObject = JsonConvert.DeserializeObject<RootObject>(res);
            rootobject.Add(jsonObject);
        }


    }