Laden...

Image URL von JSON Code in eine Picturebox übertragen

Erstellt von Gisela vor einem Jahr Letzter Beitrag vor einem Jahr 835 Views
G
Gisela Themenstarter:in
5 Beiträge seit 2022
vor einem Jahr
Image URL von JSON Code in eine Picturebox übertragen

Guten Abend, ich habe ein kleines Problem und weiß leider nicht mehr weiter.

Ich habe in einer JSON Datei mehrere URLS von Bildern, die sich am Ende öfters ändern aufgrund von neuen Nachrichten


{
  "news": [
    {
      "sophoraId": "iss-usa-russland-spacex-florida-101",
      "externalId": "9f187deb-c59c-4ed6-b6a2-078f054b9733",
      "title": "US-Rakete mit Kosmonautin zur ISS gestartet",
      "teaserImage": {
        "title": "",
        "copyright": "dpa",
        "alttext": "Start einer Falcon-9-Rakete vom US-Weltraumbahnhof Cape Canaveral mit vier Raumfahrern aus Russland, den USA und Japan an Bord (5. Oktober 2022)",
        "type": "image",
        "videowebl": {
          "imageurl": "https://www.tagesschau.de/multimedia/bilder/iss-raketenstart-101~_v-videowebl.jpg"
        },
        "klein1x1": {
          "imageurl": "https://www.tagesschau.de/multimedia/bilder/iss-raketenstart-101~_v-klein1x1.jpg"
        },
        "portraetgrossplus8x9": {
          "imageurl": "https://www.tagesschau.de/multimedia/bilder/iss-raketenstart-101~_v-portraetgrossplus8x9.jpg"
        },
        "videoweb1x1l": {
          "imageurl": "https://www.tagesschau.de/multimedia/bilder/iss-raketenstart-101~_v-videoweb1x1l.jpg"
        },
        "videowebm": {
          "imageurl": "https://www.tagesschau.de/multimedia/bilder/iss-raketenstart-101~_v-videowebm.jpg"
        },
        "videowebs": {
          "imageurl": "https://www.tagesschau.de/multimedia/bilder/iss-raketenstart-101~_v-videowebs.jpg"
        },
        "portraetgross8x9": {
          "imageurl": "https://www.tagesschau.de/multimedia/bilder/iss-raketenstart-101~_v-portraetgross8x9.jpg"
        },
        "mittelgross1x1": {
          "imageurl": "https://www.tagesschau.de/multimedia/bilder/iss-raketenstart-101~_v-mittelgross1x1.jpg"
        }
      },

Die Url ist bis


"https://www.tagesschau.de/multimedia/bilder

immer gleich.

Ich möchte diese URLS nun in eine Picturebox übertragen, sodass man bei verschiedener Themenauswahl, die dementsprechenden Bilder bekommt. (siehe Bild)

Ich habe bereits den JSON Code umgewandelt in C#


       public class News
        {
            public string sophoraId { get; set; }
            public string externalId { get; set; }
            public string title { get; set; }
            public Teaserimage teaserImage { get; set; }
            public DateTime date { get; set; }
            public Tracking[] tracking { get; set; }
            public Tag[] tags { get; set; }
            public string updateCheckUrl { get; set; }
            public int regionId { get; set; }
            public string details { get; set; }
            public string detailsweb { get; set; }
            public string shareURL { get; set; }
            public string topline { get; set; }
            public string firstSentence { get; set; }
            public Geotag[] geotags { get; set; }
            public string ressort { get; set; }
            public string type { get; set; }
        }

        public class Teaserimage
        {
            public string title { get; set; }
            public string copyright { get; set; }
            public string alttext { get; set; }
            public string type { get; set; }
            public Videowebl videowebl { get; set; }
            public Klein1x1 klein1x1 { get; set; }
            public Portraetgrossplus8x9 portraetgrossplus8x9 { get; set; }
            public Videoweb1x1l videoweb1x1l { get; set; }
            public Videowebm videowebm { get; set; }
            public Videowebs videowebs { get; set; }
            public Portraetgross8x9 portraetgross8x9 { get; set; }
            public Mittelgross1x1 mittelgross1x1 { get; set; }
        }

        public class Videowebl
        {
            public string imageurl { get; set; }
        }

        public class Klein1x1
        {
            public string imageurl { get; set; }
        }

        public class Portraetgrossplus8x9
        {
            public string imageurl { get; set; }
        }

        public class Videoweb1x1l
        {
            public string imageurl { get; set; }
        }

        public class Videowebm
        {
            public string imageurl { get; set; }
        }

        public class Videowebs
        {
            public string imageurl { get; set; }
        }

        public class Portraetgross8x9
        {
            public string imageurl { get; set; }
        }

        public class Mittelgross1x1
        {
            public string imageurl { get; set; }
        }


Ich habe auch schon versucht, diese in einer Methode so zu bauen, bekomme aber immer eine NullReferenceException, da er den Link nicht finden kann.


       public void ImagesLoadvideoWeb()
        {
            try
            {

                string imageResult = teaserimage.videowebl.imageurl;
                teaserimage= JsonConvert.DeserializeObject<TeaserImage>(imageResult);
                WebRequest request = WebRequest.Create(imageResult);
                using (var response = request.GetResponse())
                {
                    using (var str = response.GetResponseStream())
                    {
                        pictureBox1.Image = Image.FromStream(str);
                        str.Close();
                    }
                }
            }
                catch (Exception ex) { MessageBox.Show(ex.Message); }
        }

Nun ist die Frage, wohin soll denn der Link? Und wenn ich den Link einfüge von der Seite ist es doch nur für diese eine Nachricht oder? Was aber, wenn sich die Nachricht aktualisiert, und es neue Bilder zum neuen Thema gibt?

Ich beziehe mich dort auf die Tagesschau API

Vielen Dank für eure Hilfe und einen schönen Abend noch

T
2.219 Beiträge seit 2008
vor einem Jahr

Dein Code ist etwas überladen.
Für die Bilder bräuchtest du eigentlich nur eine Klasse mit der ImageUrl.
Nur die Eigenschaften in der TeaserImage Klasse müssen dann vom Namen her passen.
Anbei musst du die Properties nicht 1:1 von der Schreibweise übernehmen, was auch nicht ganz zum gängigen Stil in C# passt.
Ebenfalls kannst du die Eigenschaften auch per Attribute mappen.


public class PreviewImage
{
    public string ImageUrl { get; set; }
}

public class Teaserimage
{
    public PreviewImage VideoWeb1 { get; set; }

    public PreviewImage Klein1x1 { get; set; }

    // ...
}

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

G
Gisela Themenstarter:in
5 Beiträge seit 2022
vor einem Jahr
Image URL von JSON Code in eine Picturebox übertragen

Oh, vielen Dank für diese erste Hilfe.

Aber mein Problem bleibt dennoch bestehen, das er nicht die Bilder laden möchte, da er diese Fehlermeldung bringt


Value cannot be null. (Parameter 'reqwuestUriString')

Ich nehme an, es ist deswegen null, weil er nicht auf die Url zugreifen kann. Nur ist meine Frage, wo müsste die URL eingetragen werden.
Andererseits kann ich auch nicht die URL (nach meinem empfinden) eintragen, weil die sich sowieso jeden Tag auf's neue ändern. Also, der letzte Teil der URL

Vielen Dank für die Hilfe 🙂

4.931 Beiträge seit 2008
vor einem Jahr

Dein ganzer Code in ImagesLoadvideoWeb() ergibt so keinen wirklichen Sinn (JsonConvert.DeserializeObject mit der URL als Parameter??? Und WebRequest ist veraltet.).
Wenn du die URL hast, dann kannst du einfach per PictureBox.Load(string) das Bild laden und anzeigen lassen.

PS: Falsches Unterforum!

G
Gisela Themenstarter:in
5 Beiträge seit 2022
vor einem Jahr
Image URL von JSON Code in eine Picturebox übertragen

Ja, ich hatte es leider zu spät gemerkt, das es im falschen Unterforum ist. Wäre nett, wenn das jemand mal verschieben könnt, bitte.

Das ist mir auch alles klar, aber wenn sich die Url öfters ändern, müsste ich diese auch im String immer ändern oder nicht?

4.931 Beiträge seit 2008
vor einem Jahr

Wenn du eine neue Nachricht erhältst (also eine geänderte JSON), dann mußt du selbstverständlich auch wieder diese Methode zum Anzeigen der neuen URL aufrufen.

G
Gisela Themenstarter:in
5 Beiträge seit 2022
vor einem Jahr
Image URL von JSON Code in eine Picturebox übertragen

Also müsste ich händisch jedes mal die URL ändern?

4.931 Beiträge seit 2008
vor einem Jahr

Nein, natürlich nicht.

Lädst du denn jedesmal die JSON-Datei (über die Tagesschau-API) und deserialisierst diese oder speicherst du diese lokal?
Du mußt nur dafür sorgen, daß in der Variablen teaserImage die Referenz auf das aktuell deserialiserte JSON gesetzt ist (oder du übergibst den URL-Pfad als Parameter an die Methode).

G
Gisela Themenstarter:in
5 Beiträge seit 2022
vor einem Jahr
Image URL von JSON Code in eine Picturebox übertragen

Ich hab den Fehler gefunden. Ich war etwas, blöd ... Aber danke euch für die tolle Hilfe 🙂 Und entschuldigt mein ... fehlendes Wissen 😁