Obj/String und Json

  • WPF

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von PhilippHH.

    Obj/String und Json

    Moin liebe gemeinde,

    zum glück braucht eich eure Hilfe lange nicht.... abe rnun beisse ich mir die Zähne aus.

    Ich habe eine URL mit einer JSon-Datei.

    Diese Rufe ich ab und Lade die Daten in eine Textbox.

    Nun möchte ich den Inhalt der Json durchlaufen lassen und in eine Listbox packen, alternativ mit einem SQL Update direkt speichern.

    In meiner alten Anwendung in VB.Net hat das geklappt, nur leider in WPF C# nicht!

    C#-Quellcode

    1. System.Net.WebClient webClient = new System.Net.WebClient();
    2. string getdata = webClient.DownloadString("https://www.beispielJson.Idee");
    3. tbdata.Text = getdata;
    4. listbox1.Items.Clear();
    5. try
    6. {
    7. for (int I = 0; I <= 100; I++)
    8. {
    9. string ObjX = tbdata.Text;
    10. object result = JsonConvert.DeserializeObject(ObjX) ;
    11. listbox1.Items.Add(result("data")(I)("name") + " - " + (result("data")(I)("status"));
    12. }
    13. }
    14. catch (Exception ex)
    15. {
    16. MessageBox.Show(ex.Message);
    17. }

    Hier wird mir immer result markiert. CS0149: Methodennamen erwartet!
    Ich dachte schon 99 mal, dass ich den fehler gefunden habe!

    leider war es nicht so..

    ich hoffe ihr könnt mir das Bett vom Kopf nehmen...
    c# verwendet () bei MethodenAufrufen, und [] für indizierte Zugriffe.
    vb verwendet () für beides: MethodenAufrufen, und indizierte Zugriffe.

    Übersetzer von vb -> c# können vb-Index-Zugriffe deshalb nicht von MethodenAufrufen unterscheiden, übernehmen daher einfach (), und generieren somit immer c#-Methoden-Aufrufe.
    Das ergibt diesen Compile-Fehler.
    An diesen Stellen hatte vb einen indizierte Zugriff gemeint, und in c# muss das händisch korrigiert werden.

    also sowas muss bei rauskommen:

    C#-Quellcode

    1. result["data"][I]["status"]
    Oder so ähnlich - ich kanns hier ja nicht testen.

    object result ist aber sicherlich auch falsch - es muss höchstwahrscheinlich dynamic result heissen.
    Hallo,
    immer wieder: System.Net.WebClient soll nicht mehr verwendet werden. Siehe Doku.
    Außerdem gibt es inzwischen genug Beispiele im Forum, wie man mit HttpClient umgeht. Ich kann nur empfehlen mit eigenen Typen und Serialisierung zu arbeiten. HttpClient hat eine Erweiterungsmethode GetFromJsonAsync, die jegliches Parsen für dich übernimmt. json2csharp.com/ hier kannst du dein Json einfügen und dir C#-Klassen generieren lassen.