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

使用c反序列化json数据以获取图像#

赵鸿畴
2023-03-14

我在WikipediaAPI上请求获得3个图像url,这样我就可以在我的代码中使用这个图像。我使用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 Pageval1
         {
            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 Imageinfo2
        {
            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 Pageval2
        {
            public int ns { get; set; }
            public string title { get; set; }
            public string missing { get; set; }
            public string imagerepository { get; set; }
            public List<Imageinfo2> imageinfo { get; set; }
        }

        public class Imageinfo3
        {
            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 Pageval3
        {
            public int ns { get; set; }
            public string title { get; set; }
            public string missing { get; set; }
            public string imagerepository { get; set; }
            public List<Imageinfo3> imageinfo { get; set; }
        }

        public class Pages
    {
        public List<Pageval1> pageval1 { get; set; }
        public List<Pageval2> pageval2 { get; set; }
        public List<Pageval3> pageval3 { 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 (WebClient wc = new WebClient())
      {
        var client = new 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 = client.DownloadString(new Uri(uri));

        var responseJson = JsonConvert.DeserializeObject<RootObject>(response);
        var firstKey1 = responseJson.query.pages.First().Key;
        string image1 = responseJson.query.pages[firstKey1].pageval1.First().imageinfo.First().thumburl;

        String image2 = responseJson.query.pages[firstKey1].pageval2.First().imageinfo.First().thumburl;
        String image3 = responseJson.query.pages[firstKey1].pageval3.First().imageinfo.First().thumburl;

        Image1.SizeMode = PictureBoxSizeMode.StretchImage;
        Image2.SizeMode = PictureBoxSizeMode.StretchImage;
        Image3.SizeMode = PictureBoxSizeMode.StretchImage;
        Image1.LoadAsync(image1);
        Image2.LoadAsync(image2);
        Image3.LoadAsync(image3);




      }
   }
  }


 }

我想从每个imageinfo中获取thumburl,但我不知道如何继续使用这些类序列化json,然后获取图像。

共有1个答案

尉迟明贤
2023-03-14

我想您正在努力解决的问题是如何处理那些无效的类。发生的问题是-1-2-3作为C#标识符无效,因此无法为这些项创建类。

因为在这种情况下,它们需要是动态的,所以我们可以通过为页面元素使用字典来解决这个问题。

请注意,我使用的是Json.Net,因此您希望通过Nuget安装它。

string url = @"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|File%3AHafen%20St%20Marien%20Flensburg2007.jpg|File%3ANordertor%20im%20Schnee%20%28Flensburg%2C%20Januar%202014%29.JPG";

// i'll leave it up to you to do any null and error checking
using (var client = new WebClient())
{
    var text = client.DownloadString(url);
    var result = JsonConvert.DeserializeObject<RootObject>(text);

    foreach (var page in result.Query.Pages)
    {
        foreach (var imageInfo in page.Value.ImageInfo)
        {
            Console.WriteLine("{0}: {1}", page.Value.Title, imageInfo.ThumbUrl);
        }
    }
}

// the relevant classes for deserialization

public class RootObject
{
    public string BatchComplete { get; set; }
    public Query Query { get; set; }
}

public class Query
{
    // this is how you can deal with those invalid identifiers
    // the -1, -2, -3 will be placed as keys inside this dictionary
    public Dictionary<string, Page> Pages { set; get; }
}

public class Page
{
    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 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; }
}

产出将是:

File:Luftbild Flensburg Schleswig-Holstein Zentrum Stadthafen Foto 2012 Wolfgang Pehlemann Steinberg-Ostsee IMG 6187.jpg: https://upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Luftbild_Flensburg_Schleswig-Holstein_Zentrum_Stadthafen_Foto_2012_Wolfgang_Pehlemann_Steinberg-Ostsee_IMG_6187.jpg/400px-Luftbild_Flensburg_Schleswig-Holstein_Zentrum_Stadthafen_Foto_2012_Wolfgang_Pehlemann_Steinberg-Ostsee_IMG_6187.jpg
File:Hafen St Marien Flensburg2007.jpg: https://upload.wikimedia.org/wikipedia/commons/thumb/a/a8/Hafen_St_Marien_Flensburg2007.jpg/400px-Hafen_St_Marien_Flensburg2007.jpg
File:Nordertor im Schnee (Flensburg, Januar 2014).JPG: https://upload.wikimedia.org/wikipedia/commons/thumb/6/6b/Nordertor_im_Schnee_%28Flensburg%2C_Januar_2014%29.JPG/400px-Nordertor_im_Schnee_%28Flensburg%2C_Januar_2014%29.JPG
 类似资料:
  • 我想解析这个json文件。 {“特征”:[{“类型”:“特征”,“几何”:“{“类型”:“多边形”,“坐标”:[[26.4217861898109,40.127607984644],[26.4219934821323,40.1275230229872],[26.4218810759267,40.1273800013679],[26.4216801413981,40.1274730404221],[

  • 我一直在做一个项目,需要通过JSON文件保存和加载数据。此 JSON 文件包含其他对象的各种列表。但是,当我继续反序列化文件时,会发生这种情况: 系统。NotSupportedException:不支持反序列化没有无参数构造函数、单一参数化构造函数或用“JsonConstructorAttribute”批注的参数化构造函数的类型。 处理反序列化的代码如下: 我想反序列化的类 JSON转换器 Sav

  • 问题内容: 我在反序列化以下json数组时遇到麻烦(对不起,大小): 如果将其粘贴到json-viewer中,则会得到以下结构: 现在,包含具有坐标的数组的数组具有可变大小。所以我想在Java中,整个对象应该是一个数组,其中包含数组的集合,每个数组都包含一个。就像是 但是gson不接受这一点。我收到以下错误消息: 这似乎很奇怪,因为对我来说好像不像一个数组。但这可能使我感到困惑,或多或少地迷路了…

  • 我收到来自第3方服务提供商的JSON响应,其中包含一系列对象。当我尝试使用Jackson api反序列化JSON时。我收到以下异常 我的回答是 我的POJO课是这样的 我正在尝试使用以下代码反序列化JSON 如果我试着去做 它在BEGIN_对象本身失败。 如何使用数组读取和反序列化JSON。我应该编写自己的反序列化器吗? 编辑如果我使用JSON字符串而不是流,那么我就能够取回所有Java对象。但为

  • 问题内容: 我正在尝试将一些JSON数据反序列化为应用程序的对象。到现在为止还不错,因为JSON数据上的属性是静态的(带有值的键)。现在,我得到了一个结果,其中的关键是动态数据。 这是一个示例JSON网址: http://en.wikipedia.org/w/api.php?action=query&format=json&pageids=6695&prop=info 由此产生的JSON是: 好的

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