Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
Wie eine List aus Objekten erstellen ?
Glowhollow
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

Wie eine List aus Objekten erstellen ?

beantworten | zitieren | melden

Hallo,

ich bastel ja noch ein bischen, an dem JSON-Parser rum, und habe auch in dieser Struktur sowohl Arrays als auch eine vielzahl von Objekten, welche im Array im JSON-String sortiert sind.

Nun möchte ich, um es effektiv ansprechen zu können, dieses Array aus Objekten in eine List überführen.

Ist das auch der richtige Weg, gibt es bessere Optionen ?

Wenn es eine List ist, wie greife ich dann z.bsp. auf Properties z.bsp. aus dem Array[1] des Objekts zu ?

Kann mir hier jemand nen kurzen Überblick geben, was das effektivste ist ?

Edit: Ihr braucht mir jetzt keine Codebeispiele posten, ein grober Überblick genügt
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Glowhollow am .
private Nachricht | Beiträge des Benutzers
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 703
Herkunft: OWL

beantworten | zitieren | melden

Eine Liste kannst du über die ToList-Methode aus Linq erzeugen.

Auch auf die Objekte in einer Liste kannst du mit einem Index zugreifen.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von pinki am .
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1894
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Ohne den JSON Parser und den passenden Kontext, würde ich auch Arrays von JSON direkt als typisierte Liste<T> umwandeln.
Diese lassen sich dann auch, da diese intern auch ein Array als Container verwenden, wir ein Array über den Index nutzen.

Mich würde aber interessieren, wozu du dir einen eigenen JSON Parser baust, wenn es schon einige gute fertige Lösungen gibt.
Ist dies nur ein Test-/Lernprojekt oder wilst du es später auch produktiv einsetzen?

Falls du es produktiv nutzen willst, nimm lieber direkt Newtonsofts JSON Lib für C#
Dort werden JSON Arrays ebenfalls als List<T> deserialisiert.

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.
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5985
Herkunft: Leipzig

beantworten | zitieren | melden

C# Examples: Lists
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Glowhollow
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

Hallo T-Virus,

um deine Frage zu beantworten. Ja ich würde sehr gern den NewtonSoft Parser verwenden. Leider ist dieser mit unserem verwendeten Programm inkompatibel und der JavaScriptSerializer der von C# von haus angeboten wird, kommt mit einer bestimmten Konstellation an Input nicht klar.

Von daher muß ichs selbst bauen (bin da aber schon sehr weit fortgeschritten), muß nur noch die Objekte in eine List überführen, dann steht das schon mal.
private Nachricht | Beiträge des Benutzers
FZelle
myCSharp.de - Experte



Dabei seit:
Beiträge: 10083

beantworten | zitieren | melden

Und eine der tausenden anderen JSON Libs ( z.b. PowerJSON ) geht auch nicht?

Kann mir das echt nicht vorstellen
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16112

beantworten | zitieren | melden

Wenn Du das selbst bauen musst, dann stimmt was bei euch nicht.
Ich bezweifle bei weitem, dass ihr soooo besonders seid, dass das nicht schon lange in den wichtigsten Parsern bedacht ist.

Meine Vermutung: ihr habt irgendwas probiert, ohne euch den Parser wirklich anzuschauen.

Meine Vermutung ist simpel:
JavaScript arbeitet mit CamelCase, .NET Serialisierung bei Json i.d.R. mit PascalCase.

Ihr seid vermutlich die aller ersten, die irgendein Serialisierungsproblem haben, das sich nicht durch die SerializerOptions lösen lässt.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5985
Herkunft: Leipzig

beantworten | zitieren | melden

Also ich glaube ja auch, daß es eigentlich keine Anwendungsfall gibt, bei dem man einen eigenen JSON-Parser implementieren muß. Vor allem, wenn der Entwickler noch Probleme beim Umgang mit Arrays und Listen hat, dann sollte man davon unbedingt absehen.

Um über alternative Lösungen nachzudenken, sollte aber erstmal erklärt werden, was genau das bedeutet:
Zitat von Glowhollow
mit unserem verwendeten Programm inkompatibel
Zitat von Glowhollow
kommt mit einer bestimmten Konstellation an Input nicht klar
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
Glowhollow
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

Auf die Anklagebank mit ihm ! ;)

Um die Frage zu klären.

Wir haben eine eigene Automatisierungssoftware (flowster), mit der man sich Arbeitsabläufe zusammenstöpseln kann. Je nach Anwendungsfall, gibts dafür spezielle aktivitäten. Die sind C# geschrieben und werden über eine Bibliothek nachgeladen.

Warum auch immer unser rumänisches Entwicklerteam es nicht geschafft hat, den Newtonsoft Json Parser funktionabel in dieses Programm einzubauen, entzieht sich leider meiner Kenntnis.

Fakt ist aber, ich habe hier eine REST-Api, welche ich auslesen muß und für den weiteren Gebrauch aufarbeiten muß.

Da der JavaScriptSerializer z.Bsp. nicht eigenständig auflösen kann, weil der Parser damit ein Problem hat, wenn in einem Array, 2 Properties in einem Array unerwartete Ergebnisse liefert, in unserem Fall einen Leerstring (also statt: "sys_domain":{"link":"https://dev63125.service-now.com/api/now/table/sys_user_group/global","value":"global"} nur "sys_domain":"") und dies auch nicht durch bearbeitung der für diesen speziellen Fall, sys_domain, und deren getter und setter nicht zum erfolg führt, ist es nun mal so, das ich das manuell machen muß.

Mir ist klar und durchaus bewußt, das das unsere Software können sollte. Da ich aber, da nichts zu sagen habe, sondern nur einer von 3 Entwicklern bin (die Rumänen müßten so an die 20+ sein) - lassen die sich da nicht reinreden. Irgend ein assembly problem, hab ich am rande mitbekommen, aber insofern nicht mein problem.

Zudem war ich 4 Wochen nicht da, also ich bastel nicht seit 4 wochen rum, sondern hab das ganze 4 Wochen ruhen lassen.

@Abt Magst du mir das bei der .NET Serialisierung bei JSON, mich etwas erleuchten ?

Ich habe noch für Abschnitte des einfachen "JSON" String, den JavaScript deserializer. Der funktioniert hier auch soweit ganz gut. Oben besagtes Problem, macht es aber nicht einfacher, und so muß ich die die Parts, welche nicht gefressen werden, über eigene Funktionen miteinbauen.

Soweit kein Problem.

P.S. Unser Chefentwickler, hat sich schon tierisch mit dem rumänischen Entwicklerteam gestritten, da wir aber intern, zwar uns in diese Software eingekauft haben, sind uns jedoch die Hände gebunden, was die generelle Entwicklung anbetrifft (btw. Flowster ist noch nicht final).
private Nachricht | Beiträge des Benutzers
MrSparkle
myCSharp.de - Team

Avatar #avatar-2159.gif


Dabei seit:
Beiträge: 5985
Herkunft: Leipzig

beantworten | zitieren | melden

Für das Verständnis des Problems spielt es keine Rolle, wo die Entwickler herkommen, oder ob du 4 Wochen lang nicht da warst. Eure firmeninternen Probleme gehören auch nicht hier ins Forum.

Was eigentlich interessiert, ist, aus welchen Anforderungen oder Gegebenheiten eine eigene Implementierung des JSON-Parsers notwendig sein sollte bzw. warum der NewtonSoft-Parser nicht ausreicht. Das geht aus deiner Erklärung aber nicht so richtig hervor.
Weeks of programming can save you hours of planning
private Nachricht | Beiträge des Benutzers
pinki
myCSharp.de - Member

Avatar #avatar-4072.jpg


Dabei seit:
Beiträge: 703
Herkunft: OWL

beantworten | zitieren | melden

Ich habe das so verstanden, dass als Eigenschaftswert ab und zu mal statt eines Objekts ein Leerstring drin stehen kann und dadurch der komplette Typ falsch ist.
private Nachricht | Beiträge des Benutzers
Glowhollow
myCSharp.de - Member



Dabei seit:
Beiträge: 76

Themenstarter:

beantworten | zitieren | melden

nochmal. Ich würde den JSON-Parser von newton soft wirklich wirklich gerne nutzen (nutze diesen auch privat). Werde jedoch nicht meine Kompetenzen überschreiten und die Arbeit niederlegen, weil die Implementation mit unserer Software nicht funktioniert.

Mehr muss ich hoffentlich nicht mehr dazu sagen, ok ?

@Pinki, genau das ist es. Der JavaScript-Deserializer, ist ja funktionsfähig, für alle anderen JSON-Values kann ich den ja auch nutzen. Und wiegesagt, es ist nicht so, das ich nicht versucht habe, das Problem über die getter und setter abzufangen. Wenn ich das mache, bekomme ich ne Fehlermeldung vom Deserializer, das irgendwas mit dem Index nicht stimmt. Ich habe diesen nicht programmiert und daher leider keine Ahnung, wo es da hakt. Ist auch schlecht an den Quellcode ranzukommen.

Daher habe ich im Netz einen kleinen, Parser gefunden, den ich auch schon miteingebaut habe.

---------------------------------------------------------------------------------------------------------------------

Ich werde später in dem Thread, nochmal auf die ToList geschichte eingehen, falls mir da was unklar ist. Melde mich später
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16112

beantworten | zitieren | melden

Zitat von pinki
Ich habe das so verstanden, dass als Eigenschaftswert ab und zu mal statt eines Objekts ein Leerstring drin stehen kann und dadurch der komplette Typ falsch ist.
Das nennt sich Dynamic Json.

NewtonSoft hat dafür das JToken Objekt, an dem man erkennen kann, ob es sich um ein JObject oder ein JArray handelt.
Anschließend kann man entsprechend damit arbeiten und zB. durch einen Converter auch ein einzelnes Objekt in eine Liste parsen/deserialisieren.

Die einfache De/Serialisierung durch JsonConvert kann das nicht abdecken, weil es in C# keine dynamischen Klassen gibt.
Das sollte soweit durch die Grundlagen von C# bekannt sein ;-)

Wir reden also - wie bereits vermutet - von einem üblichen Json Feature, das so ziemlich jeder Parser eingebaut hat.
Zitat von Glowhollow
Ist auch schlecht an den Quellcode ranzukommen.
NewtonSoft ist Open Source auf GitHub. Für die Problemfindung hier aber irrelevant; wir sprechen ja einfach nur von Dynamic Json.
Zitat von Glowhollow
Werde jedoch nicht meine Kompetenzen überschreiten und die Arbeit niederlegen, weil die Implementation mit unserer Software nicht funktioniert.
Sehe keinen Grund, dass sie nicht funktionieren soll.
Wenn Du Dich mit Json und NewtonSoft etwas tiefer beschäftigt hättest, was als Entwickler zu Deinen Aufgaben gehört, wäre Dir das mit dem Dynamic Json über den Weg gelaufen.

So hast Du nun aber Zeit verschwendet, um einen eigenen Json Parser zu schreiben.
Soviel zum Thema Kompetenzentscheidung.
Zitat von Glowhollow
Werde jedoch nicht meine Kompetenzen überschreiten und die Arbeit niederlegen, weil die Implementation mit unserer Software nicht funktioniert.

Das ist das Problem wenn man die Fragestellung nicht genau formuliert.
Der Titel des Themas ist "Wie eine List aus Objekten erstellen ?"

Ich konnte ohne den Hinweis von pinki nicht erkennen, dass wir hier von einem Dynamic Json sprechen.
Daher ist Dein Einwand "Auf die Anklagebank" durchaus korrekt: bei einer ordentlichen Formulierung, worum es eigentlich geht, wäre die Irritation gar nicht entstanden.

Ansonsten sehe ich das wie MrSparkle: eure internen Firmenprobleme haben mit der Lösungsfindung nichts am Hut.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers