Einblick in die Verwendung dynamischer und anderer Datentypen in Frends.
Geschrieben vonOssi Galkin Vor über einer Woche aktualisiertFrends Processes basiert auf C# und .NET, daher werden C#-Datentypen verwendet. InsbesonderedynamischUndObjektDatentypen könnten zu Verwirrung führen.
Dynamische und Objekttypen werden in Frends verwendet, um die Verwendung der Punktnotation zu ermöglichen (wie#Ergebnis.body.foo.bar
) häufig in Frends verwendet. TechnischDynamisches MetaobjektDie von der dynamischen Klasse verwendete Klasse ermöglicht das Durchsuchen der Daten nach Methoden, die als Teil des Pfads in Punktnotation verwendet werden.
Mehrere interne Frends-Komponenten und Prozesselemente verarbeiten Daten als JTokens (JArray, JObject, JProperty, JValue sind JTokens), aber tatsächlich sind die meisten JTokens in Frends-Prozessen generische Objekte. Andernfalls könnten Sie nicht mit einer Punktnotation auf ein JToken zugreifen, sondern müssten mit einer ["Schlüssel"]-Notation darauf zugreifen. Daher zum BeispielJSON.Konvertieren Sie JsonString in JTokengibt JToken als generisches Objekt zurück.
Es ist zu beachten, dass die dritte Möglichkeit zur Nutzung derToken auswählenMethode mit einemJsonPathz.B.Wählen Sie Token("$.wasauchimmer")
. Normalerweise wird bei der Arbeit mit Frends die Punktnotation verwendet, aber die Klarheit zwischen diesen Stilen ist umstritten.
Zwei Prozesselemente, die ebenfalls häufig für Verwirrung sorgen, da sie ein dynamisches Objekt zurückgeben, sind Codeelemente und Unterprozesse. Wenn ein Codeelement den Typ der Variablen nicht angibt, ist es dynamisch. Das Ergebnis, das durch den Aufruf eines Unterprozesses erhalten wird, ist ein dynamisches Objekt.
Die unglückliche Konsequenz der Verwendung von dynamischen Objekten ist, dass Erweiterungsmethoden nicht wie üblich direkt aufgerufen werden können, da Erweiterungsmethoden während der Kompilierung erweitert werden und dies erfordert, dass der Typ bekannt ist, was bei dynamischen Objekten nicht der Fall ist. Diese Fehler zeigen Meldungen wie'etwas' enthält keine Definition für 'etwas'
. Sie können auf die gleiche Weise gelöst werden wie jede andere Situation, in der Daten aus irgendeinem Grund in einen falschen C#-Datentyp konvertiert werden. Sie müssen in den richtigen konvertiert werden.
Diese Fehler können zum Beispiel sein:
„Objekt“ enthält keine Definition für „ToArray“
„System.Array“ enthält keine Definition für „Contains“.
„System.Collections.Generic.Dictionary<string,string>.KeyCollection“ enthält keine Definition für „First“
Und wie bereits erwähnt, entstehen sie aus der Tatsache, dass etwas dynamisch ist und ihnen zur Kompilierzeit die generische oder ursprüngliche Typisierung fehlt und daher auf Erweiterungsmethoden, z. B. LINQ-Erweiterungsmethoden, nicht zugegriffen werden kann.
Lösungen sindkonvertierenKonvertieren Sie die Daten in den ursprünglichen Datentyp oder etwas Passendes. Verwenden Sie dazu beispielsweise den folgenden Code:
(Zeichenfolge)#var.i["Name"]).Split('\\').First()
(#env.clients als Objekt[]).ToList().Contains()
Der nächste Artikel istBeispiel zu Parse.
Verwandte ArtikelManueller AuslöserEinführung in die Frends UI-NavigationEinführung in die Verwendung von LINQ mit JSON-ObjektenEinführung in Frends AgentEinführung in die Frends-Umgebung