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
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.
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 🙂
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!
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?
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.
Also müsste ich händisch jedes mal die URL ändern?
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).
Ich hab den Fehler gefunden. Ich war etwas, blöd ... Aber danke euch für die tolle Hilfe 🙂 Und entschuldigt mein ... fehlendes Wissen 😁