Forum: PC-Programmierung Newtonsoft Json im .net


von Zupfal (Gast)


Lesenswert?

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 :-/

von IT-Abteilung (Gast)


Lesenswert?

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...

von Zupfal (Gast)


Lesenswert?

Na weil genügend Zeit ist, nach einer eventuellen Lösung zu suchen.

von Noch ein Kommentar (Gast)


Lesenswert?

> 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!

von Zupfal (Gast)


Lesenswert?

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.

von Ärnd (Gast)


Lesenswert?

Viiiiiellleicht:
DeserializeAnonymousType(...)

von Noch ein Kommentar (Gast)


Lesenswert?

> 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.

von Zupfal (Gast)


Lesenswert?

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.

von Noch ein Kommentar (Gast)


Lesenswert?

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.

von Zupfal (Gast)


Lesenswert?

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.

von Karwendel (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.