Hallo Leute, Ich verwende den Json Parser von Newtonsoft in Vb.net und habe mir auch eine Klasse mit den Json Utils generiert. Json kommt von Wordpress und funktioniert. Aber: Da kommt dann wieder mal eines von schier unendlichen Plugins, welches dann entgegen der Restapi Vorgabe, ein Array statt einem Integer (o.ä.) übergibt. Den Jsonparser wirfts dann natürlich raus. Ich kann ja in den Settings vorgeben, wie er sich verhalten soll, wenn Null oder etwas übertragen wird, was in der Klasse nicht vorhanden ist. AAAABER: Wie gebe ich vor, das er falsch deklarierte Objekte ignorieren soll? Gibt es eine Deklaration, was quasi alle Datentypen dynamisch annehmen kann? Ein Dankeschön im Vorhinein. Leider habe ich keinen Code o.ä. parat,da ich mit einem Bandscheibenvorfall im Krankenhaus liege :-/
Zupfal schrieb: > Leider habe ich keinen Code o.ä. parat,da ich mit einem > Bandscheibenvorfall im Krankenhaus liege :-/ Und warum fragst du dann JETZT? Du kannst die Antworten ja offensichtlich gerade sowieso nicht umsetzen...
> was quasi alle Datentypen dynamisch annehmen kann?
Im Prinzip ja. Json kommt ja aus dem Javascript Umfeld. In JS gibt es
keine Klassendefinitionen. Du kannst jedem Objekt beliebige Attribute
und Methoden zuweisen.
In einer Sprache mit statischen Klassendefinitionen kannst du jedes Json
als Baum von Arrays und Hashtables einlesen.
Wahrscheinlich stößt du Fälle, in denen du die falschen Daten nicht
ignorieren kannst. Z.B. du erwartest eine Integer, da kommt ein String
"20%" und dein Programm muss nun die "25%" in eine Integer umrechnen.
Zumindest hast du jetzt genug Zeit. Kannst nachdenken, ob du dein
Programm von Objekten auf Hashtables umstellst. Und wie du an die
benötigten Informationen kommst, wenn sich die Daten nicht an die API
Spezifikation halten.
Gute Besserung!
Früher gab es mal Variant. Mit Object als Deklaration habe ich dass Problem nur bei Arrays (Die vom Json kommen). Den erwähnten 20% String zu Integer kann ich leider nicht beeinflussen. Dafür müsste ich eine Korrekturfunktion für den Json String erstellen, welcher mir VOR dem Newtonsoft Parser die Fehler korrigiert. Da habe ich wieder das Problem, dass es unendlich viele falsche Rückgaben von unendlich vielen Wordpress Plugins gibt :-( Darum wollte ich fragen, ob Jemand eine Lösung mit dem Json Parser von Newtonsoft kennt.
> welcher mir VOR dem Newtonsoft Parser die Fehler korrigiert
Ich befürchte, da gibt es keine allgemeine Lösung.
Wahrscheinlich ist immer noch der geringste Aufwand:
- Zuerst nimmst einen Parser wie vba-json, das sein eigens Json-Objekt
mitbringt.
- Dann baust du für jede Quelle einen Konverter, die alle benötigten
Informationen in eine einheitliche Form bringt.
- Danach wandelst du das veränderte Jsom wieder in einen String um.
- Jetzt erst ein Parser, der die Objekte erstellt, mit denen dein
Programm arbeitet.
- Oder du baust Konstruktoren, die deine Objekte aus den Json-Objekten
erzeugen können.
Hier wäre die Beschreibung der Parser Settings: https://www.newtonsoft.com/json/help/html/serializationsettings.htm Vielleicht fällt jemanden noch etwas ein. Für jedes Plugin eine eigene Klasse abzuleiten ist unmöglich. Eventuell kann ich noch was mit den Deklarationen tricksen. Die Frage ist halt, was passiert, wenn der Parser einen Integer auf ein Array schreiben will. Objekt geht defenitiv nicht. Rest kann ich leider nicht ausprobieren.
Tja. Sieht so aus, als wärst du von falschen Voraussetzungen ausgegangen. Würden sich alle an die API Spezifikation halten, ginge es mit dem Newtonsoft ganz einfach. In Wirklichkeit musst du aber aus dem konfusen Zeug erst mal rekonstruieren, wie du an benötigten Informationen kommst. Ganz egal, ob du universelle Json-Objekte oder deine Objekte nimmst - du musst unzählige Sonderfälle berücksichtigen. Geht halt nicht so einfach, wie du dachtest. Aber mit Json hast du noch Glück. Soap ist schlimmer. Da erfindet jeder Serializer neue Datentypen, mit denen der Parser nicht zurecht kommt.
Dann wird mir nichts übrig bleiben, mit Try catch den Fehler abzufangen und eine Meldung auszugeben. Dazu einen Debugmode, welcher die Json Datei speichert. Dann kann ich mir die Spezialedition jedesmal ansehen und von Softwareversion zu Version ergänzen. Dazu noch eine Inkompatiblitätsliste. Weil für jede Aufgabe gibt es gefühlt 10 verschiedene Aufgaben. Muss der Kunde dann eben ein anderes verwenden.
Fragmal om VBArchiv Forum nach. Dort sind die Profis fürs VB Programmieren vertreten. Nicht hier!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.