当前位置: 首页 > 知识库问答 >
问题:

从WikipediaAPI反序列化json数据,从三个imageinfo获取thumburl

萧波峻
2023-03-14

我在WikipediaAPI上请求从每个imageinfo中获取thumburl,以便在picturebox中使用此图片。我使用urlhttps://en.wikipedia.org/w/api.php?action=query

  {
    public class Imageinfo
   {
    public string thumburl { get; set; }
    public int thumbwidth { get; set; }
    public int thumbheight { get; set; }
    public string url { get; set; }
    public string descriptionurl { get; set; }
   }

   public class Pageval
   {
    public int ns { get; set; }
    public string title { get; set; }
    public string missing { get; set; }
    public string imagerepository { get; set; }
    public List<Imageinfo> imageinfo { get; set; }
   }


   public class Query
  {
    public Dictionary<string, Pageval> pages { get; set; }
  }

   public class RootObject
   {
    public string batchcomplete { get; set; }
    public Query query { get; set; }
   }




   class Image
   {
    public static PictureBox Image1 = new PictureBox();
    public static PictureBox Image2 = new PictureBox();
    public static PictureBox Image3 = new PictureBox();



    public static void Load_Image1()
    {
        using (var wc = new System.Net.WebClient())
        {
            var uri = ("https://en.wikipedia.org/w/api.php?action=query&prop=imageinfo&format=json&iiprop=url&iiurlwidth=400&titles=File%3ALuftbild%20Flensburg%20Schleswig-Holstein%20Zentrum%20Stadthafen%20Foto%202012%20Wolfgang%20Pehlemann%20Steinberg-Ostsee%20IMG%206187.jpg%7CFile%3AHafen%20St%20Marien%20Flensburg2007.jpg%7CFile%3ANordertor%20im%20Schnee%20(Flensburg%2C%20Januar%202014).JPG");
            var response = wc.DownloadString(new Uri(uri));
            var responseJson = JsonConvert.DeserializeObject<RootObject>(response);

            foreach (KeyValuePair<string, Pageval> entry in responseJson.query.pages)
            {
                var url = entry.Value.imageinfo.First().thumburl;
                for(int i; i<=3 ;i++)
                {

                }

            }

        }
    }
}

我想做一个for循环,通过它我可以在3个图框中显示3个图像。但是真的不知道怎么做

共有1个答案

夹谷硕
2023-03-14

首先,您的类定义需要进行一些重构:

  public class Imageinfo
            {
                public string thumburl { get; set; }
                public int thumbwidth { get; set; }
                public int thumbheight { get; set; }
                public string url { get; set; }
                public string descriptionurl { get; set; }
            }

            public class Pageval
            {
                public int ns { get; set; }
                public string title { get; set; }
                public string missing { get; set; }
                public string imagerepository { get; set; }
                public List<Imageinfo> imageinfo { get; set; }
            }


            public class Query
            {
                public Dictionary<string, Pageval> pages { get; set; }
            }

            public class RootObject
            {
                public string batchcomplete { get; set; }
                public Query query { get; set; }
            }


            public class Image
            {
                public static PictureBox Image1 = new PictureBox();
                public static PictureBox Image2 = new PictureBox();
                public static PictureBox Image3 = new PictureBox();             

            }

以及反序列化逻辑:

   using (var wc = new System.Net.WebClient())
      {
        var uri = ("https://en.wikipedia.org/w/api.php?action=query&prop=imageinfo&format=json&iiprop=url&iiurlwidth=400&titles=File%3ALuftbild%20Flensburg%20Schleswig-Holstein%20Zentrum%20Stadthafen%20Foto%202012%20Wolfgang%20Pehlemann%20Steinberg-Ostsee%20IMG%206187.jpg%7CFile%3AHafen%20St%20Marien%20Flensburg2007.jpg%7CFile%3ANordertor%20im%20Schnee%20(Flensburg%2C%20Januar%202014).JPG");
        var response = wc.DownloadString(new Uri(uri));
        var responseJson = JsonConvert.DeserializeObject<RootObject>(response);

        foreach(KeyValuePair<string, Pageval> entry in responseJson.query.pages)
        {
        var url = entry.Value.imageinfo.First().thumburl;
        //Do something with url
        Console.WriteLine(url);
        }

   }

这将提供URL。请加价!谢谢

 类似资料:
  • 问题内容: 我有一个由数据库支持的小应用程序(SQLite,但与问题无关)。我已经定义了一些类型,例如: 这些类型映射到数据库中的表。当我读取数据时,我最终会写出这样的函数: (为了清楚起见,我省略了处理错误。) 编写这样的函数确实很烦人,感觉就像创建了很多样板。有没有更惯用的方法将一组SqlValues转换为Haskell数据? 问题答案: 库中似乎没有任何标准方法可用于此目的。如果您感觉特别敏

  • 我试图从一个.json数组创建一个数组,并且从当前的.json数组中只获取2个变量(keyName和token)。 目前,我使用了一个api调用来获取.json文件,然后将其解析为一个数组,如下所示: 请帮忙,因为我是初学C#的,如果有些说不通的话,对不起,我的英语不是很好。

  • 我想制作一个应用程序,我需要从api中提取wikipedi图像。但有些页面也包含.png图像。对于我的代码,我只需要.jpeg图像。我找到了这个apihttps://en.wikipedia.org/w/api.php?action=query

  • 问题内容: 我很好奇序列化和反序列化的方式。我使用关键字“ json”和“ tuple”进行搜索,但找不到所需的内容。 问题答案: 我通过和Json.net进行测试,测试代码如下。结果显示可序列化和可反序列化。因此,我可以在应用程序中使用它们。 测试代码 注释 在将序列化到字符串{“项目1”:“一”,“项目2”:“嘻嘻”,“项目3”:真正},并且它可以被反序列化回类型。

  • 我应该能够对配对到JSON/从JSON配对。 我有

  • 问题内容: 我们使用Jackson 1.9.1对与Java对象之间的JSON请求响应字符串进行序列化和反序列化。原始Java类型,集合类型和自定义对象都可以(反)序列化而不会出现问题。但是,尝试将JSON字符串反序列化为Java枚举时遇到问题。JSON字符串的序列化方式如下: wt的Java类型如下所示: 我在SO上提到了this,this和this,并提出了重量单位的枚举,如下所示: 问题是,每