C#将JSON反序列化为列表

没有

我有这段代码可从API链接中检索Json字符串。Json被反序列化并返回到文本框。只要只有1个Json值,此方法就可以完美地工作,如果返回的Json值大于1,则会因以下错误而崩溃:

附加信息:无法将当前JSON数组(例如[1,2,3])反序列化为类型'GW2_tradingPost.RootObject',因为该类型需要JSON对象(例如{“ name”:“ value”})才能正确反序列化。

要解决此错误,可以将JSON更改为JSON对象(例如{“ name”:“ value”}),也可以将反序列化类型更改为数组,或者将实现集合接口的类型(例如ICollection,IList)更改为List,例如List从JSON数组反序列化。还可以将JsonArrayAttribute添加到类型中,以强制其从JSON数组反序列化。

我进行研究是因为没有Json列表,所以没有地方可以存放Json。

我已经尝试过此代码和各种类似的代码。

List<RootObject> list = JsonConvert.DeserializeObject<List<RootObject>>(jsonReader.ToString());
return list;

这将返回错误:

错误1无法将类型'System.Collections.Generic.List'隐式转换为'GW2_tradingPost.RootObject'e:\ mega \ gw2_tradingpost \ gw2_tradingpost \ api_request.cs 34

我不完全明白这是什么意思。

这是我的完整代码。

api_Request.cs

public class api_Request
    {
        public RootObject GetApi(string url)
        {

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            try
            {
                WebResponse response = request.GetResponse();
                using (Stream responseStream = response.GetResponseStream())
                {
                 StreamReader reader = new StreamReader(responseStream, Encoding.UTF8);
                var jsonReader = new JsonTextReader(reader);
                var serializer = new JsonSerializer();
                return serializer.Deserialize<RootObject>(jsonReader);
            }
            }
            catch (WebException ex)
            {
                WebResponse errorResponse = ex.Response;
                using (Stream responseStream = errorResponse.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(responseStream, Encoding.GetEncoding("utf-8"));
                    String errorText = reader.ReadToEnd();
                    // log errorText
                }
                throw;
            }
        }

    }


    public class Buy
    {
        public int listings { get; set; }
        public int unit_price { get; set; }
        public int quantity { get; set; }
    }

    public class Sell
    {
        public int listings { get; set; }
        public int unit_price { get; set; }
        public int quantity { get; set; }
    }

    public class RootObject
    {
        public int id { get; set; }
        public List<Buy> buys { get; set; }
        public List<Sell> sells { get; set; }
    }

Form1.cs

 private void button1_Click(object sender, EventArgs e)
        {
            RootObject RootObject = new RootObject();
            api_Request api_Request = new api_Request();
            richTextBox1.Text = api_Request.GetApi("https://api.guildwars2.com/v2/commerce/listings").id.ToString();
        }

在此json中是单个ID,因此可以正常工作。https://api.guildwars2.com/v2/commerce/listings/19684

但是,当像这样检索多个ID时,它会中断。https://api.guildwars2.com/v2/commerce/listings

编码器1409

这是获取所有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);
        }


    }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将JSON反序列化为C#对象列表

来自分类Dev

C#将XML反序列化为ChildClasses的列表

来自分类Dev

将XML反序列化为C#中的列表

来自分类Dev

C# 将 XML 反序列化为对象列表

来自分类Dev

无法将JSON列表反序列化为C#中的对象列表

来自分类Dev

将JSON反序列化为C#对象

来自分类Dev

将JSON反序列化为C#类

来自分类Dev

将JSON反序列化为对象C#

来自分类Dev

将嵌套的JSON反序列化为C#对象

来自分类Dev

将JSON反序列化为C#类

来自分类Dev

将JSON反序列化为静态成员C#

来自分类Dev

将多行JSON反序列化为C#对象

来自分类Dev

将json文件反序列化为对象C#

来自分类Dev

无法将json反序列化为C#对象

来自分类Dev

将json反序列化为C#中的类

来自分类Dev

将JSON反序列化为C#对象

来自分类Dev

无法将JSon反序列化为C#

来自分类Dev

将JSON数组反序列化为C#

来自分类Dev

将嵌套的 JSON 反序列化为 C# 类

来自分类Dev

将 json 对象反序列化为 C# 对象

来自分类Dev

C# - 将 Json 反序列化为字典

来自分类Dev

将C#中的JSON数组反序列化为列表

来自分类Dev

在C#中,将简单JSON对象反序列化为整数列表

来自分类Dev

将C#中的JSON数组反序列化为列表

来自分类Dev

将JSON对象反序列化为.Net列表(C#)

来自分类Dev

json反序列化为C#

来自分类Dev

将JSON反序列化为C#对象-不反序列化任何数据

来自分类Dev

将JSON反序列化为C#对象-不反序列化任何数据

来自分类Dev

将Json对象反序列化为列表?